PHPの日付・時刻とは?date関数とDateTimeの使い方を解説

PR PHP

PHPの日付・時刻とは?date関数とDateTimeの使い方を解説

💡 この記事でわかること

  • date() 関数で現在の日時を取得・表示する方法
  • YmdHis などの書式文字
  • タイムゾーンの設定(date_default_timezone_set)
  • strtotimeDateTime での文字列との変換と日付の計算
  • 2つの日付の差(何日後・何日前)を求める方法

1. PHPで日付を扱うには?

PHPで日付・時刻を扱う方法は、大きく2つあります。

  • date() 関数:「今日の日付を 2026-09-01 の形で表示したい」といった、表示(フォーマット)に手軽
  • DateTime クラス:「3日後」「2つの日付の差」など、日付の計算に向いている

💡 まずは date() で表示に慣れ、計算が必要になったら DateTime を使う、という順で覚えるとスムーズです

👉 PHPの基本文法(<?php ?>・echo・変数)についての記事はこちら


2. 現在の日時を表示する(date関数)

date("書式") と書くと、現在の日時を指定した形の文字列で返します。

<?php
echo date("Y-m-d");           // 2026-09-01
echo date("Y年n月j日");        // 2026年9月1日
echo date("Y-m-d H:i:s");     // 2026-09-01 14:30:05
echo date("Y/m/d (D)");       // 2026/09/01 (Tue)

👉 第2引数に「基準となる時刻」を渡すこともできます。省略すると「今」になります。時刻はコンピューター内部では タイムスタンプ(1970年1月1日からの秒数)という数値で表され、time() で現在のタイムスタンプを取得できます。

<?php
echo time();                       // 例: 1788000605(現在のタイムスタンプ)
echo date("Y-m-d", 0);             // 1970-01-01

3. よく使う書式文字 早見表

文字意味
Y年(4桁)2026
y年(2桁)26
m / n月(2桁 / 先頭0なし)09 / 9
d / j日(2桁 / 先頭0なし)01 / 1
H / G時(24時間・2桁 / 先頭0なし)08 / 8
i分(2桁)05
s秒(2桁)09
D / l曜日(英語3文字 / 英語フル)Tue / Tuesday
w曜日(数字。0=日曜)2

💡 書式文字の中に、文字としてそのまま出したいアルファベットを入れたいときは \ でエスケープします(例:date("Y\\年"))。日本語(年・月・日)はそのまま書けます。


4. タイムゾーンの設定

👉 サーバーの設定によっては、date() が日本時間ではなく協定世界時(UTC)で返ることがあります(日本との差は9時間)。スクリプトの先頭で、扱いたいタイムゾーンを指定しておくと確実です。

<?php
date_default_timezone_set("Asia/Tokyo");

echo date("Y-m-d H:i:s");   // 日本時間で表示される

💡 本来は php.inidate.timezoneAsia/Tokyo を設定するのが正式ですphp.ini をさわれないレンタルサーバーなどでは、上のコードで対応します。WordPressの中では、WordPress自身が管理画面の設定にもとづいて時刻を扱うため、wp_date() など専用の関数を使います。


5. 文字列と日付を変換する

2026-09-01 という文字列」を日付として扱いたいときは、strtotime() でタイムスタンプに変換します。

<?php
$ts = strtotime("2026-09-01");
echo date("Y年n月j日", $ts);   // 2026年9月1日

// 相対的な指定もできる
echo date("Y-m-d", strtotime("+1 week"));   // 1週間後の日付

💡 strtotime() は変換できない文字列を渡すと false を返します。日付の書式は 2026-09-01(ハイフン区切り)が安全です。2026/09/01 のスラッシュ区切りは「アメリカ式(月/日/年)」と解釈されることがあります。


6. 日付を計算する(DateTime)

「◯日後」「◯か月前」といった計算は、DateTime クラスが分かりやすいです。new DateTime() は現在、new DateTime("日付文字列") で任意の日付を作れます。

<?php
$date = new DateTime("2026-09-01");

$date->modify("+3 days");
echo $date->format("Y-m-d");   // 2026-09-04

$date->modify("-1 month");
echo $date->format("Y-m-d");   // 2026-08-04
  • new DateTime("2026-09-01"):日付を作る
  • ->modify("+3 days"):days / weeks / months / years で加減算
  • ->format("Y-m-d"):date() と同じ書式文字で文字列にする

👉 PHPのクラス(newやメソッドの使い方)についての記事はこちら


7. 2つの日付の差を求める(diff)

<?php
$start = new DateTime("2026-09-01");
$end   = new DateTime("2026-12-25");

$diff = $start->diff($end);

echo $diff->days;                     // 115(合計日数)
echo "{$diff->m}か月{$diff->d}日";     // 3か月24日
  • $a->diff($b):2つの DateTime の差を表すオブジェクトを返す
  • ->days:合計の日数。->y / ->m / ->d:年・月・日ごとの差

💡 「投稿日から今日までの経過日数」「締切まであと何日」などは、この diff() で求められます


8. まとめ

  • 表示は date("Y-m-d H:i:s")。書式文字は Y m d H i s を覚えれば十分
  • 時刻がずれるときは date_default_timezone_set("Asia/Tokyo") を先頭に
  • 文字列 → 日付は strtotime()。書式は 2026-09-01(ハイフン)が安全
  • 計算は DateTime:modify("+3 days")format("Y-m-d")
  • 日付の差は $a->diff($b)->days

👉 まずは date("Y-m-d") で今日の日付を表示し、date("Y-m-d", strtotime("+7 days")) で1週間後を出す、あたりから試してみましょう。日付の扱いは、予約サイトやブログの投稿日表示など、実務でも頻繁に登場します。

-PHP
-, , ,