💡 この記事でわかること
date()関数で現在の日時を取得・表示する方法Y・m・d・H・i・sなどの書式文字- タイムゾーンの設定(
date_default_timezone_set) strtotime・DateTimeでの文字列との変換と日付の計算- 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-013. よく使う書式文字 早見表
| 文字 | 意味 | 例 |
|---|---|---|
| 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.ini の date.timezone に Asia/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-04new 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週間後を出す、あたりから試してみましょう。日付の扱いは、予約サイトやブログの投稿日表示など、実務でも頻繁に登場します。