プログラミングしていると日付処理が必要になる場面があります。PHPで日付を扱うときに欠かせないのがdate関数です。date関数を使用すると、現在日時の表示方法、フォーマットの指定、過去・未来の日付の取得方法などが可能です
本記事では、date関数だけでなく、strtotime関数、DateTimeクラスを使った日付処理の基本から応用までを、コード例をふまえてわかりやすく解説します。WordPressやタイムゾーン対応にも触れていますので、ぜひご活用ください。
目次
1.PHPにおけるdate関数の基本と使い方
Webアプリケーションや業務システムでは、必ずと言っていいほど正確な日時情報を扱う場面が出てくるでしょう。PHPではdate関数を使うことで、簡単に日付や時刻を取得し整形できます。ここでは、PHPのdate関数に関する基本と使い方を解説します。
PHPで日付を使う理由と用途
プログラミングをしていると、日付を扱うタイミングが多いです。現在の日時の表示、過去や未来の日付の計算、条件による分岐処理などがあり、PHPをつかったコーディングでも使います。
たとえば、ログイン履歴や投稿日時を記録するログ機能では、正確なタイムスタンプが欠かせません。予約や販売期間を管理する場合には、現在の日付と指定された日付を比較して、処理を分ける必要があります。また、ファイル名に日時を含めることで、重複や上書きを防ぎ、管理がしやすくなります。日付処理はシステムの信頼性に関わる重要な要素です。
PHPのdate関数の基本構文
PHPで日付や時刻を取得したい場合に使われるのがdate関数で、指定した形式で日付・時刻を文字列として出力することができます。
基本構文は次の通りです。
date( string $format [, int $timestamp = time() ] ) : string |
第一引数の$formatには、日付や時刻の出力形式を文字列で指定します。たとえば「Y-m-d」と記述すると、「2025-01-31」のように西暦・月・日がハイフン区切りで出力されます。第二引数の$timestampには、タイムスタンプを指定できますが、省略すれば現在の時刻が使用されます。
たとえば、Yは4桁の西暦、mはゼロ埋めされた2桁の月、dは日を表します。時刻はHが24時間形式、iが分、sが秒を示します。これら組み合わせることで、用途に応じた出力が可能です。詳しくは後述するフォーマットを参考にしてください
PHPのdate関数で現在の日時を出力する方法
PHPで現在の日時を出力したい場合には、date()関数とechoを組み合わせた記述が最もシンプルです。次のコード例で、現在の日時を「年-月-日 時:分:秒」の形式で出力できます。
echo date("Y-m-d H:i:s"); |
2.PHPでdate関数を使ったフォーマットについて
PHPで日付や時刻を出力したい場合には、date関数のフォーマット指定子を使ってみましょう。
PHPのdate関数でよく使う日付フォーマット一覧
date関数では、フォーマット文字列を組み合わせて、さまざまな形式で日付や時刻を出力できます。日付フォーマットで使用可能な指定子を一覧で紹介します。
指定子 | 意味 | 出力例 |
---|---|---|
Y | 西暦(4桁) | 2025 |
y | 西暦(下2桁) | 25 |
m | 月(2桁、ゼロ埋め) | 04 |
n | 月(ゼロ埋めなし) | 4 |
F | 月名(英語) | April |
M | 月名の略称(英語) | Apr |
d | 日(2桁、ゼロ埋め) | 9 |
j | 日(ゼロ埋めなし) | 9 |
D | 曜日の略称(英語) | Thu |
l | 曜日(英語) | Thursday |
w | 曜日番号(0:日〜6:土) | 4 |
z | 年初からの日数(0始まり) | 99 |
W | 週番号(ISO-8601形式) | 15 |
H | 時(24時間制/2桁) | 17 |
G | 時(24時間制/ゼロ埋めなし) | 5 |
h | 時(12時間制/2桁) | 5 |
g | 時(12時間制/ゼロ埋めなし) | 5 |
i | 分(2桁) | 03 |
s | 秒(2桁) | 09 |
a | 午前/午後(小文字) | am / pm |
A | 午前/午後(大文字) | AM / PM |
t | 月の日数 | 30 |
L | 閏年(1:閏年、0:平年) | 0または1 |
o | 年(ISO-8601準拠) | 2025 |
U | Unixタイムスタンプ | 1744180200 |
r | RFC 2822形式 | Thu, 10 Apr 2025 17:30:00 +0900 |
c | ISO 8601形式 | 2025-04-10T17:30:00+09:00 |
実際の開発では、用途やルールに合わせてフォーマットを切り替えることも必要ですので、ぜひこの一覧表を参考にしてください。
PHPのdate関数で曜日や月を日本語で出力する方法
date関数でそのまま曜日や月を出力すると英語表記になります。日本語で出力したい場合には少し工夫すれば対応可能です。
次のコード例のように、曜日番号(w)を使って変換する方法がおすすめです。
$week = ['日', '月', '火', '水', '木', '金', '土']; echo $week[date('w')]; |
PHPはデフォルトで英語ロケールを使用しているため、日本語での曜日や月名を扱うには、setlocale()関数とstrftime()関数を組み合わせて実現することもできます。
setlocale(LC_TIME, 'ja_JP.UTF-8'); echo strftime('%A'); |
ただし、strftime()はPHP 8.1以降で非推奨となっていますので、将来的な互換性に不安がある場合は避けてください。
PHPで日付をフォーマット指定して「yyyymmdd」で出力する方法
業務システムなどではログファイルやファイル名で、日付を「yyyymmdd」形式で扱うことがあります。これは、年・月・日をゼロ埋めで連続した8桁の数字にすることで、並び替えや検索がしやすくなるためです。
PHPで日付をフォーマット指定して「yyyymmdd」で出力したい場合には、次のコード例のように記述しましょう。
echo date('Ymd'); |
PHPでformatを使う方法と注意点(php date->format)
date関数に加えて、PHPのDateTimeクラスにはformat()があります。オブジェクト指向で日付を操作したい場合には、formatを使ってください。
$date = new DateTime(); echo $date->format('Y-m-d H:i:s'); |
このコードは、date()関数と同じく「2025-01-31 01:23:45」のような形式で日時を出力します。->format()でも指定子のルールはdate()と同じで、直感的に扱えるのが魅力です。
注意点としては、format()はDateTimeクラスに対してのみ使えるので、単純な日付取得ではdate()のほうが手軽です。一方で、時差計算や日時比較などを行う際には、DateTimeとformat()を組み合わせることでより高度な処理が可能です。
関連記事
PHPプログラミングとは?将来性や実践で活用できるコード例など初心者にわかりやすく解説
3.PHPでstrtotime関数を使う方法
現在の日付を取得するだけでなく、「明日」「1週間後」「3日前」といった相対的な日時を使いたい場合もあるでしょう。PHPには、文字列を日時に変換できる便利な関数「strtotime」があります。ここでは、strtotimeについて解説します。
PHPのstrtotime関数について基本的な使い方
strtotime関数は、文字列を時間として解釈し、タイムスタンプとして扱えるように変換してくれるPHPの関数です。文字列で記述された日付や時刻の情報を、Unixタイムスタンプに変換します。
たとえば「+1 day」「-2 weeks」などのような英語表現を使って相対的な日時を簡単に使えるのが特長です。基本的な構文は次の通りです。
strtotime( string $datetime [, int $baseTimestamp = time() ] ) : int|false |
第一引数の$datetimeには、解析したい日付や時刻の文字列を指定します。第二引数の$baseTimestampは基準となる時刻で、省略すると現在時刻が基準になります。戻り値はUnixタイムスタンプで、date()関数と組み合わせて任意の形式での出力が可能です。
たとえば、翌日の日付を出力するには、次のコード例のようになります。
echo date('Y-m-d', strtotime('+1 day')); |
PHPのstrtotime関数で日付計算を活用する方法
strtotime関数を使えば、現在を基準とした過去・未来の日時を簡単に取得できます。たとえば、「7日前」「来週」「1ヶ月後」など、業務アプリケーションでよく使われる形式にも柔軟に対応可能です。
echo date('Y-m-d', strtotime('-7 days')); // 1週間前 echo date('Y-m-d', strtotime('+1 month')); // 1ヶ月後 echo date('Y-m-d', strtotime('next Monday')); // 次の月曜日 |
strtotime関数を使用した日付計算は自動化や日付の比較において便利です。たとえば、有効期限の判定や定期スケジュールの算出など、業務システムで使える場面が多くあります。
なお、日付操作はバグにつながりやすいため、なるべく読みやすく直感的な書き方がおすすめなので、ぜひ活用してみてください。
PHPでstrtotimeとdateを組み合わせてさまざまな出力を試す
strtotime関数単体ではタイムスタンプしか取得できませんが、date関数と組み合わせて使用すると、さまざまなフォーマットで日付を出力できます。
たとえば、「2週間後の日曜日を 'Y年m月d日(D)' の形式で出力する」場合は、次のコードのように書けます。
echo date('Y年m月d日(D)', strtotime('+2 weeks Sunday')); |
このコード例では、まず+2 weeks Sundayという文字列をstrtotime()でタイムスタンプに変換し、その変換結果をdateで読みやすい形式に整えています。このような組み合わせは、締め切り日などを示したいときに有効です。
また、基準日を変更したい場合は、strtotimeの第2引数を使用すると、柔軟に日付計算がおこなえます。
$base = strtotime('2025-01-31'); echo date('Y-m-d', strtotime('+1 week', $base)); |
strtotimeとdateを組み合わせた使用は、実務的な日付処理に役立つ場面があるので、ぜひ身に着けてください。
4.PHPで「date->format」を使用して日時を出力する方法
PHPのdate関数をより高度な日時操作で使いたい場合、DateTimeクラスと->format()メソッドを活用すると効果的です。とくに複雑なフォーマット指定や、日付の加算・減算、比較処理を実装する必要がある場合に適しています。ここでは、「date->format」の使い方と、実務でよく使われるフォーマット例をわかりやすく解説します。
DateTimeクラスとformatメソッドの基本
DateTimeクラスは、PHPにおいて日時をオブジェクトとして扱える仕組みを提供してくれます。DateTimeクラスを使うことで、複雑な日時処理を読みやすく、再利用しやすい形で記述することが可能です。
コード例
$date = new DateTime(); echo $date->format('Y-m-d H:i:s'); |
このコード例では、まずDateTimeクラスを生成し、続けてformat()メソッドで任意の書式に整形しています。format()の引数は、date()関数と同様に、フォーマット指定子を組み合わせて指定しましょう。ここで指定した「Y」は4桁の西暦、「m」は2桁の月、「d」は日を表し、H:i:sは時・分・秒を24時間形式で表現するための組み合わせです。
カスタムフォーマットで出力する方法
実務でよく求められるのが、日本語表記を含むカスタムフォーマットです。たとえば、「2025年01月31日」のような形式が帳票やメール通知で求められます。
「〇年〇月〇日」と出力するコード例です。
$date = new DateTime(); echo $date->format('Y年m月d日'); |
このコード例では、「Y」「m」「d」というフォーマット指定子の間に、「年」「月」「日」を挿入しています。日本語表記が必要な場面では、このコード例のように記述することで対応可能です。
また、週単位でのレポートや集計処理では「第○週」などの表現が求められることもありますが、これはW(年間の週番号)やN(曜日番号)などと組み合わせることで実現可能です。
実務でよく使用される日付と時刻の形式例
プログラミングの実務では、さまざまなフォーマットを使い分ける必要があります。よく使用される日付と時刻の形式例を紹介しましょう。
タイムスタンプを付与する
ファイル名などの一意性を保つために、年月日+時分秒を組み合わせるケースです。
$date = new DateTime(); echo $date->format('Ymd_His'); // 出力例:20250131_012345 |
日付をハイフン区切りで出力する
システム内部の処理やAPIレスポンスなどで使用されるシンプルな形式例です。
$date = new DateTime(); echo $date->format('Y-m-d'); // 出力例:2025-01-31 |
ユーザー向けの日本語日時
メール本文やフロント画面で、視認性を重視した出力が必要な場面に適しています。
$date = new DateTime(); echo $date->format('Y年n月j日 H時i分'); // 出力例:2025年1月31日 01時23分 |
5.PHPで日付比較する方法と注意点
業務アプリケーションでは、日付比較を実装することがあります。たとえば、「今日と同じ日か」「期限内かどうか」「未来の日付か過去か」など、日付比較による判定はさまざまです。ここでは、PHPで日付比較する方法と注意しておきたいポイントについて解説します。
strtotimeを使用した日付比較
PHPで日付比較する簡単な方法は、strtotime関数を使ってUnixタイムスタンプに変換し、if文で数値として比較する方法です。
現在の日付と特定の日付を比較するコード例
$target = '2025-01-01'; if (strtotime($target) > time()) { echo '未来の日付です'; } else { echo '未来の日付ではありません(今日または過去の日付です)'; } |
このコード例では、対象の日付をstrtotimeで変換し、time関数が返す現在時刻のタイムスタンプと比較しています。どちらも整数値の比較になるため、余計なキャストや整形処理を挟まずに判定が行えるのがメリットです。
ただし、フォーマットの違いや不正な文字列を渡すと、予期しない挙動になることがあるため、事前にstrtotimeの戻り値をチェックすることをおすすめします。
DateTimeクラスを使用した日付比較
より厳密かつ可読性の高い方法として、DateTimeクラスを使った比較も可能です。PHPではDateTime同士を比較演算子で直接比較できるため、オブジェクト指向の構文に慣れている場合はこちらの方がわかりやすく記述できるでしょう。
コード例
$now = new DateTime(); $limit = new DateTime('2025-01-01');
echo '期限前です'; } else { echo '期限を過ぎています'; } |
DateTimeクラスを使用した日付比較では、フォーマットの整合性やタイムゾーンの管理がしやすく、複数の比較処理を行う場合にも対応しやすいです。また、DateTimeは差分計算やフォーマット整形も得意なので、日付比較と合わせて日付処理をまとめて実装したい場合に適しています。
6.date.phpをWordPressで使用するコツ
WordPressには投稿記事の日付や時刻を表示する機能がテンプレートファイルに組み込まれています。テーマ開発やカスタマイズの場面で使用するのがdate.phpというテンプレートファイルです。ここでは、WordPressにおけるdate.phpの役割や、投稿日のフォーマット変更などについて解説します。PHPのdate関数やformat構文と組み合わせることで、さまざまな出力が可能になるので、ぜひ参考にしてください。
WordPressのdate.phpとは?
date.phpは、WordPressのテンプレート階層において、日付アーカイブページを表示するときに呼び出されるファイルです。たとえば、特定の日に投稿された記事を一覧表示する「日別アーカイブ」では、このdate.phpテンプレートが使用されます。
たとえば、URLに/2025/01/31/のような日付指定が含まれている場合、その日付に紐づく投稿一覧を表示するためにdate.phpが参照されます。date.php内では、ループ構文を使用して投稿一覧を表示したり、日付の見出しをカスタマイズしたりする処理が一般的に記述されています。
なお、テーマによってはこのファイルが存在しないこともあり、その場合はWordPressのテンプレート階層に従って、archive.phpやindex.phpが代わりに使用されます。
WordPressで日付フォーマットを変更する方法
WordPressでは、管理画面から日付や時刻の表示フォーマットを簡単に変更できます。設定は「管理画面 > 設定 > 一般」の中にある「日付のフォーマット」「時刻のフォーマット」から行いましょう。
この変更は、テーマ内でthe_date()、the_time()、get_the_date()などを使っている場所に影響します。たとえば、フォーマットに「Y年n月j日」を指定すれば、投稿日は「2025年1月31日」というように日本語形式で表示されます。
テンプレートファイル側でフォーマットを指定したい場合は、次のコード例のように記述すると、管理画面の設定に依存せず出力形式を変更可能です。
echo get_the_date('Y年m月d日'); |
WordPressにおけるthe_date()とthe_time()違いと使い分け
WordPressで日付や時刻を出力するのに使用する関数には、the_dateとthe_timeがあります。どちらも投稿日時を出力するための関数ですが、動作が異なるので注意してください。
the_dateは同じ日付の投稿が続く場合、一度だけ日付を表示するように設計されています。主にループ内で使用され、日ごとに区切った表示を行いたい場合に適しています。表示された日付と同じ投稿が連続する場合、2回目以降は出力されません。
<?php the_date(); ?> |
一方the_timeは、すべての投稿に対して必ず日時を表示します。投稿単位で正確な日時を表示したい場合に使用しましょう。時間単位での並び順や記録を意識する場面では、the_time()が適しています。
<?php the_time('Y/m/d H:i'); ?> |
7.PHPにおけるタイムゾーンに関する注意点
タイムゾーン設定が原因で、意図しない時間が表示されたり、サーバー側とクライアント側で時間の食い違いが発生したりすることがあります。date関数、strtotime関数、DateTimeクラスなど、すべての日時処理にタイムゾーン設定が関係します。ここでは、PHPにおけるタイムゾーンに関する注意点について解説します。
なぜ表示時間がズレる?タイムゾーンの罠
PHPでプログラミングをしていて、「表示される時刻が1時間早い」「想定している時刻とズレている」という現象に遭遇したことはないでしょうか?これらは、PHPのタイムゾーンと、期待しているタイムゾーンが異なっていることが原因です。
たとえば、日本のユーザー向けに開発しているにもかかわらず、サーバーのタイムゾーンがUTCやAmerica/New_Yorkのままだと、date関数で取得される時刻は日本時間ではなく、設定されたタイムゾーン基準で出力されてしまいます。
また、DateTimeクラスを使う場合も、明示的にタイムゾーンを指定しない限り、PHPのデフォルト設定に従うため、意図しない結果になる恐れがあります。
date_default_timezone_setの使い方
タイムゾーンの問題を防ぐための基本的な方法は、スクリプトの冒頭で明示的にタイムゾーンを設定することです。PHPでは、date_default_timezone_set関数を使ってグローバルにタイムゾーンを設定できます。
日本時間(JST)をタイムゾーンに指定するには次のように記述してください。
date_default_timezone_set('Asia/Tokyo'); |
このタイムゾーンの設定は、コードが実行されている間、date関数などすべてに適用されます。タイムゾーンを明示しておくことで、万が一サーバーや環境が変わっても意図通りの日時処理が行えるようになります。
なお、複数のタイムゾーンを扱うシステムや、APIで国際的なデータを処理する場合には、DateTimeZoneクラスと組み合わせることで対応可能です。
正確に日時管理するためのヒント
信頼性の高い日時管理を実現するためには、これから紹介する方法をヒントにしてください。
タイムゾーンを必ず明示する
PHP内部の設定に依存せず、明確にタイムゾーンを指定することで、意図しないズレを防げます。特に外部サーバーを利用している場合には必須の対策です。日本時間を設定する場合は「Asia/Tokyo」を使ってください。
ログやデータベースにはUTCを使用する
表示上は日本時間でも、システム内部では世界標準時(UTC)で統一しておくと、システム間での整合性が保ちやすくなります。ユーザーのタイムゾーンに応じてフロント側で変換する設計が理想的です。
DateTimeクラスとDateTimeZoneを活用する
タイムゾーンを指定したうえで日時を操作したい場合は、DateTimeとDateTimeZoneを組み合わせてみましょう。サーバー環境に左右されない日時処理が可能になります。
コード例
$tz = new DateTimeZone('Asia/Tokyo'); $date = new DateTime('now', $tz); echo $date->format('Y-m-d H:i:s'); |
関連記事
【2025年版】PHP最新バージョン8.4と8系統のインストール・確認方法と安定版の選び方を解説
8.まとめ
本記事では、PHPのdate関数を中心に、日付や時刻を扱うための基本的な構文やフォーマット指定、よく使うコード例を幅広く解説しました。さらに、strtotime()による相対的な日時の取得方法や、DateTimeクラスを使った柔軟な出力・比較処理、WordPressとの連携、タイムゾーン管理まで、実務でよく使うような点についても解説しています。
日付処理は一見単純に見えて、フォーマットやタイムゾーンの違いによってトラブルにつながることも多いです。本記事で紹介した内容を参考にして、ぜひ開発の精度と信頼性を高めてくださいね。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。
自身に最適なフリーランスエージェントを探したい方はこちらよりご確認いただけます。