PHP の日時のフォーマット変更(format, modify)を完全解説!初心者向け解説
新人
「PHPで日付や時間のフォーマットを変更する方法を教えてください!」
先輩
「PHPにはformatというメソッドがあって、日付や時間を簡単にフォーマットできます。」
新人
「formatメソッドって、具体的にはどう使うんですか?」
先輩
「それでは、実際のコードを見てみましょう!」
1. PHP の日時のフォーマット変更とは?(基本的な説明)
PHPで日付や時間を扱う際、最も一般的で強力な方法が DateTimeクラス と formatメソッド を組み合わせた操作です。プログラミングでは、システムが持っている「2026-02-05 10:00:00」といった無機質なデータを、Webサイトの利用者が読みやすい「2026年2月5日」や「10時00分」といった形式に変換する必要があります。これを「フォーマット(書式)の変更」と呼びます。
初心者の方でも安心してください。まずは「日時のデータを作る(インスタンス化)」、次に「好きな形に整えて出力する」という2ステップを覚えるだけで、誰でも簡単に日時表示をカスタマイズできます。
new DateTime() は「今この瞬間の時計を準備する」というイメージです。そして format() の中身を書き換えるだけで、表示を自由自在に操れます。
<?php
// 1. 現在の日時データを作成する
$now = new DateTime();
// 2. formatメソッドを使って、ハイフン区切りの形式で表示する
// 'Y-m-d H:i:s' は「年-月-日 時:分:秒」を意味します
echo $now->format('Y-m-d H:i:s');
?>
出力結果(例:2026年2月5日 10:15:30の場合):
2026-02-05 10:15:30
このように、format メソッドは「どんな見た目で画面に出したいか」を指定する、Web開発において欠かせない非常に便利なツールです。PHPの標準機能なので、特別な設定なしですぐに使い始めることができます。
2. format メソッドの使い方と主要なフォーマット記号一覧
format メソッドは、DateTimeクラスが持っている日時のデータを、私たちが見やすい文字列に変換するための道具です。カッコ () の中に特定の「記号(フォーマット文字)」を組み合わせることで、表示を自由自在にカスタマイズできます。
まずは、実務や個人開発で最もよく使われる基本的な記号をマスターしましょう。これらを知っているだけで、ほとんどのWebサイトの日時表示に対応できます。
| 記号 | 意味 | 表示例 |
|---|---|---|
Y |
西暦を4桁で表示 | 2026 |
m |
月を2桁(先頭に0をつける)で表示 | 02, 12 |
d |
日を2桁(先頭に0をつける)で表示 | 05, 25 |
H |
時間を24時間制(00〜23)で表示 | 09, 21 |
i |
分を2桁(00〜59)で表示 | 08, 45 |
s |
秒を2桁(00〜59)で表示 | 03, 59 |
プログラミング未経験の方にとって、記号の組み合わせは少し難しく感じるかもしれませんが、パズルと同じです。「年/月/日」なら 'Y/m/d'、「時:分」なら 'H:i' と繋げるだけです。
それでは、具体的に「スラッシュ区切り」で日時を表示するサンプルコードを見てみましょう。
<?php
// 現在の日時を取得
$now = new DateTime();
// formatメソッドに記号を渡して、好きな形式で出力する
// ここでは「2026/02/05 15:30:45」のような形式になります
echo $now->format('Y/m/d H:i:s');
?>
出力結果:
2026/02/05 15:30:45
このように、format メソッドに渡す文字列を変えるだけで、システムが持つデータを「ユーザーにとって親切な表記」へと一瞬で変換できます。日本語を含めて format('Y年m月d日') と書くこともできるので、用途に合わせて使い分けてみてください。
3. modify メソッドを使った日時の加算・減算(1日後・1ヶ月前など)
Webサイトを運営していると、「キャンペーン終了まであと◯日」や「1週間前の投稿を表示する」といった、日時の計算が必要な場面が多々あります。PHPの DateTime クラスに用意されている modify() メソッドを使えば、難しい計算式を書かなくても、英語のような自然な言葉で直感的に日時を操作できます。
まずは、プログラミング初心者の方でもすぐに使える「1日後の日付」を取得する基本の書き方を見てみましょう。modify("+1 day") と書くだけで、PHPが自動的に翌日の日付を計算してくれます。
<?php
// 1. 今日の日付を準備する
$date = new DateTime();
// 2. modifyメソッドで「1日プラス」する
$date->modify("+1 day");
// 3. formatで分かりやすく表示する
echo $date->format("Y-m-d H:i:s");
?>
出力結果(例:2026年2月5日の場合):
2026-02-06 10:15:30
次に、過去の日時を求める「減算(引き算)」の例です。例えば、1週間前の日付を知りたいときは -1 week と指定します。月を跨ぐ計算(例えば3月31日の1ヶ月前など)も、PHP側でカレンダーを考慮して正しく処理してくれるので非常に安全です。
<?php
$date = new DateTime();
// 「1週間マイナス」して過去に戻る
$date->modify("-1 week");
echo $date->format("Y-m-d H:i:s");
?>
出力結果(例:2026年2月5日の場合):
2026-01-29 10:15:30
+3 days(3日後)-1 month(1ヶ月前)+2 years(2年後)last day of this month(今月末)
modify() は単なる数字の計算ではなく、単語を組み合わせるだけで複雑な日付操作をノーコード感覚で実現できるのが最大の特徴です。
4. 異なるフォーマットでの日時表示(カスタムフォーマット)
PHPの format メソッドを使いこなすと、Webサイトのデザインに合わせて日時の見た目を自由自在に変更できます。基本の「年月日」以外にも、曜日を加えたり、AM/PMといった12時間表記にしたりと、ユーザーにとって最も読みやすい形を簡単に作れるのがメリットです。
ここでは、初心者の方でもすぐに使える「曜日付き表示」と「12時間制(午前・午後)表示」の具体的な書き方を見ていきましょう。
① 曜日を表示に取り入れる
例えば、「Sunday, 2026-02-05」のように曜日を英語で表示したい場合は、フォーマット文字の l(小文字のL)を使用します。イベントの告知サイトやブログの投稿日などでよく使われるスタイルです。
<?php
// 現在の日時を取得
$date = new DateTime();
// 'l' (小文字のL) を使うとフルスペルの曜日が表示されます
// カンマやスペースもそのまま文字列として反映されます
echo $date->format('l, Y-m-d');
?>
出力結果(例):
Thursday, 2026-02-05
② 12時間制とAM/PMを表示する
システム内部では24時間制で管理していても、画面上では「午後 02:30」のように親しみやすい12時間制で出したいことがあります。この場合は、時間の H(24時間制)を h(12時間制)に変え、最後に A を加えるだけでOKです。
<?php
$date = new DateTime();
// 'h' は12時間制、'A' は AMまたはPM を表示する記号です
echo $date->format('Y-m-d h:i:s A');
?>
出力結果(例):
2026-02-05 10:15:30 AM
このように、format メソッドのカッコ () の中にある記号をパズルのように組み合わせるだけで、特別な計算をしなくても世界中のWebサービスで見かけるような多様な日時表示が実現可能です。まずはよく使うパターンをいくつかコピー&ペーストして試してみるのが上達の近道です。
5. 日時の操作でよく使うフォーマットの例
日時の操作では、いくつかのフォーマットがよく使用されます。以下は、日付と時間をよく使うフォーマットの例です。
Y-m-d- 年-月-日(例:2025-03-02)d/m/Y- 日/月/年(例:02/03/2025)l, F j, Y- 曜日, 月 日, 年(例:Sunday, March 2, 2025)h:i:s A- 12時間制 時:分:秒 AM/PM(例:02:30:15 PM)Y年m月d日- 日本語形式(例:2025年03月02日)
例えば、ISO 8601形式の日付(年-月-日)を表示する場合、次のように記述します。
<?php
$date = new DateTime();
echo $date->format('Y-m-d');
?>
出力結果:
2025-03-02
さらに、時間を含めた形式で表示したい場合は、以下のように記述します。
<?php
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');
?>
出力結果:
2025-03-02 14:30:15
これらのフォーマットをうまく活用することで、日時をさまざまな形で表示できます。どの形式を使用するかは、アプリケーションの要件に応じて選びましょう。
6. フォーマット変更時の注意点(タイムゾーンなど)
日付や時間をフォーマットする際、特に注意すべき点のひとつはタイムゾーンです。DateTime クラスでは、タイムゾーンが異なると同じ日時でも表示が異なる場合があります。特に、異なるタイムゾーンを跨いだアプリケーションでは、タイムゾーンを正しく設定することが重要です。
タイムゾーンを設定するためには、setTimezone() メソッドを使用します。このメソッドを使うことで、特定のタイムゾーンを設定し、そのタイムゾーンに基づいた日時を表示できます。
例えば、次のコードでは、UTCタイムゾーンと東京タイムゾーンの時間を比較してみます。
<?php
$timezone_utc = new DateTimeZone("UTC");
$timezone_tokyo = new DateTimeZone("Asia/Tokyo");
$utc_time = new DateTime("now", $timezone_utc);
$tokyo_time = new DateTime("now", $timezone_tokyo);
echo "UTC Time: " . $utc_time->format("Y-m-d H:i:s") . "<br>";
echo "Tokyo Time: " . $tokyo_time->format("Y-m-d H:i:s");
?>
出力結果:
UTC Time: 2025-03-02 06:30:15
Tokyo Time: 2025-03-02 15:30:15
このように、タイムゾーンを適切に設定することで、異なる地域での時間を正確に扱うことができます。
7. 実際の開発で役立つ日時操作の応用例(カウントダウン、年齢計算など)
DateTime クラスは、実際の開発において非常に役立つ日時操作を簡単に実現できます。ここでは、カウントダウンタイマーや年齢計算など、実務でよく使うシナリオを紹介します。
① カウントダウンタイマーの作成
カウントダウンタイマーを作成するには、目標日時と現在の日時との差分を求める必要があります。以下のコードでは、目標日時(例えば、2025年12月31日)までの残り時間を表示します。
<?php
$now = new DateTime();
$target = new DateTime("2025-12-31 23:59");
$interval = $now->diff($target);
echo "残り時間: " . $interval->format('%R%a 日 %H 時間 %I 分 %S 秒');
?>
出力結果(2025年3月2日 14:30時点の場合):
残り時間: +305 日 09 時間 29 分 45 秒
② ユーザーの誕生日から年齢を計算する
ユーザーの誕生日を基に現在の年齢を計算する方法も簡単です。DateTime クラスを使うことで、誕生日を指定して年齢を計算できます。
<?php
$birthdate = new DateTime("1990-05-15");
$now = new DateTime();
$age = $now->diff($birthdate);
echo "年齢: " . $age->y . "歳";
?>
出力結果(現在が2025年3月2日の場合):
年齢: 34歳
③ 期限付きのタスクを表示する
期限が設定されたタスクを管理する際、期限までの日数を表示することができます。以下のコードでは、タスクの締切日が2025年4月1日で、現在の日付を使って締切までの日数を表示します。
<?php
$due_date = new DateTime("2025-04-01");
$now = new DateTime();
$interval = $now->diff($due_date);
echo "締切まで: " . $interval->days . "日";
?>
出力結果(現在が2025年3月2日の場合):
締切まで: 30日
このように、DateTime クラスを活用することで、さまざまな日付操作や計算が簡単に行えます。日付や時間を管理する際には、DateTime クラスが非常に有用です。
8. PHP で日時を操作する際のベストプラクティス
DateTime クラスを使う際のベストプラクティスをいくつか紹介します。これらを守ることで、より効率的で正確な日時操作を行うことができます。
① タイムゾーンの明示的な設定
日時を扱う際は、必ずタイムゾーンを設定しましょう。特に、国際的にサービスを提供している場合は、ユーザーのタイムゾーンを考慮して日時を表示する必要があります。
例えば、アメリカと日本で異なるタイムゾーンを考慮する場合、setTimezone() メソッドを使ってタイムゾーンを設定します。
<?php
$timezone = new DateTimeZone("Asia/Tokyo");
$date = new DateTime("2025-03-02 14:30", $timezone);
echo $date->format("Y-m-d H:i:s");
?>
出力結果:
2025-03-02 14:30:00
② 例外処理の追加
日時を扱う際は、ユーザー入力や外部データを受け取る場合、DateTime クラスのインスタンス化で例外が発生することがあります。これに対応するために、例外処理を加えることが重要です。
<?php
try {
$date = new DateTime("invalid-date");
} catch (Exception $e) {
echo "エラー: " . $e->getMessage();
}
?>
出力結果:
エラー: Failed to parse time string (invalid-date) at position 0 (i).
このように、try-catch ブロックを使うことで、エラーを適切に処理できます。
まとめ
PHPで日時を扱う機能は、日常的なWebアプリケーション開発において非常に重要な要素です。この記事では、DateTimeクラスを用いたformatメソッドやmodifyメソッドを使った日時のフォーマット変更・操作方法について詳しく見てきました。
特にformatメソッドは、日付や時間を好きな書式で表示するために欠かせない存在です。年・月・日、時間・分・秒をそれぞれ細かく制御できるため、ユーザーに見せる日時表示を柔軟に調整できます。また、曜日やAM/PM表記といったカスタマイズも簡単に行える点が非常に便利です。
さらに、modifyメソッドを使うことで、「明日の日付」や「1週間前」「来月初日」など、日付の加算・減算を直感的に記述できるようになりました。これはカレンダー機能やスケジュール管理、締切日計算など多くの場面で役立つ機能です。
また、diffを使えば2つの日時の差を取得でき、年齢計算やカウントダウンの実装にも応用できます。たとえば「あと○日でイベントが始まる」といった機能を簡単に導入できます。
日時操作におけるもう一つの大事な要素がタイムゾーンの扱いです。Webアプリを国際的に展開する場合や、ユーザーごとに異なる地域に住んでいる場合、適切なタイムゾーンを設定することで、時間表示の信頼性が大きく向上します。
PHPではDateTimeZoneを活用し、setTimezoneで任意の地域の時刻を正確に表示できます。これは、イベントの開始時刻通知、チャットアプリの投稿時間、海外向けニュース配信など、用途が多岐に渡ります。
実際の開発現場では、例外処理も大切です。ユーザー入力の日時が不正だった場合でも、try-catchで安全にエラーメッセージを表示することで、アプリケーションの信頼性を高められます。
このように、PHPのDateTimeを使いこなすことで、カレンダーやスケジュール管理、時間制限付きのイベント機能などを高い精度で実装できます。しかも記述は比較的シンプルなので、初心者でも習得しやすいのが魅力です。
最後に、よく使うフォーマットを再確認しておくと、以下のようになります:
Y-m-d:年-月-日d/m/Y:日/月/年H:i:s:24時間制の時間h:i:s A:12時間制の時間(AM/PM)l:曜日(Mondayなど)
開発目的に応じて、これらのフォーマットやメソッドを組み合わせて、ユーザーにとってわかりやすく、かつ正確な日時表示を心がけましょう。
新人
「先輩、PHPで日付を自由に表示したり、何日後とか簡単に出せるってすごく便利ですね!」
先輩
「そうだね。DateTimeクラスを使えば、複雑な処理もシンプルに書けるし、formatやmodifyでいろんな操作ができるんだ。」
新人
「modify('+1 week')みたいに書くだけで1週間後とか、すごくわかりやすかったです。あと、カウントダウンも作れるのは驚きました!」
先輩
「うん、しかもdiffを使えば年齢計算もできるし、タイムゾーンも考慮すれば国際的な対応もバッチリだよ。」
新人
「表示形式も自由に変えられるから、ユーザーにとって見やすい画面が作れそうです!」
先輩
「そうだね。これを覚えておけば、スケジュール管理アプリや通知機能もスムーズに作れるよ。実務でもよく使うから、今のうちにマスターしておこう。」
新人
「はい!これでPHPでの日付操作も怖くなくなりました!」