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. 実務でそのまま使える!PHPの日時フォーマット記述例まとめ
PHPの format メソッドは、指定する記号の組み合わせ次第で、世界中のあらゆる表示形式に対応できます。ここでは、実際のWebサイト制作やシステム開発で「これさえ覚えておけば困らない」という定番のフォーマット例を厳選して紹介します。
プログラミング未経験の方でも、以下のリストから必要な形式をコピーして format('ここの中身') に貼り付けるだけで、すぐにプロ級の表示が実現できます。
| 用途・形式 | フォーマット記号 | 実際の表示例 |
|---|---|---|
| 標準的な日付 | 'Y-m-d' |
2026-02-05 |
| 日本で一般的な形式 | 'Y/m/d' |
2026/02/05 |
| 日本語の年月日 | 'Y年m月d日' |
2026年02月05日 |
| フルセット(秒まで) | 'Y-m-d H:i:s' |
2026-02-05 10:15:30 |
| 曜日(英語)付き | 'l, F j, Y' |
Thursday, February 5, 2026 |
| 12時間制(AM/PM) | 'h:i:s A' |
10:15:30 AM |
それでは、具体的に2つのパターンをコードで見てみましょう。まずは最も使われる「ハイフン区切りの日付」を表示するコードです。データベースに保存する際などにも多用される形式です。
<?php
// 現在の日時を取得
$date = new DateTime();
// 'Y-m-d' は「4桁の年-2桁の月-2桁の日」を意味します
// 2026年2月5日の場合、「2026-02-05」と出力されます
echo $date->format('Y-m-d');
?>
次に、日本のWebサイトやお知らせ一覧などでよく見かける「時・分」を含んだ日本語形式のコードです。記号の間に直接「年」や「時」といった文字を混ぜるだけでOKという、直感的な書き方が可能です。
<?php
$date = new DateTime();
// 日本語を直接含めることができます
// Hは24時間制、iは分を表します
echo $date->format('Y年m月d日 H時i分');
?>
出力結果:
2026年02月05日 10時15分
このように、format メソッドは「どんな見た目でユーザーに情報を届けたいか」を決定する、デザイナーのような役割を果たします。どの記号を使うべきか迷ったときは、このページの表をリファレンス(辞書)として活用してください。アプリケーションの雰囲気に合わせて、最適な形式を選び取ることが重要です。
6. フォーマット変更時の注意点(タイムゾーンとphp.ini設定)
PHPで日時を扱う際に、初心者が最も陥りやすい罠が「タイムゾーン(時差)」の設定ミスです。プログラムを動かしたとき、現在時刻を表示したはずなのに「なぜか9時間ズレている」という現象が起きたことはありませんか?これは、PHPの標準設定が日本時間(Asia/Tokyo)ではなく、世界標準時(UTC)になっていることが原因です。
正確な日本時間を表示させるには、DateTimeクラスに「どこの国の時間を使いたいか」を教えてあげる必要があります。そこで登場するのが DateTimeZone クラスです。これを使えば、システムの設定に関わらず、常に正しい日本時間を取得できます。
PHPには「php.ini」という設定ファイルがあり、そこで
date.timezone = "Asia/Tokyo" と設定されていれば自動で日本時間になります。しかし、実務ではサーバー環境によって設定が異なるため、コード内で明示的にタイムゾーンを指定するのが最も安全で「プロらしい」書き方です。
それでは、世界標準時(UTC)と日本時間(東京)を同時に作って、その違いを確認してみるサンプルコードを見てみましょう。
<?php
// 1. 「UTC」と「日本時間」の2つの設定(タイムゾーン)を準備する
$timezone_utc = new DateTimeZone("UTC");
$timezone_tokyo = new DateTimeZone("Asia/Tokyo");
// 2. それぞれの設定を使って、現在の日時データを作成する
$utc_time = new DateTime("now", $timezone_utc);
$tokyo_time = new DateTime("now", $timezone_tokyo);
// 3. 画面に表示して比較する
echo "世界標準時(UTC): " . $utc_time->format("Y-m-d H:i:s") . "<br>";
echo "日本時間(Tokyo): " . $tokyo_time->format("Y-m-d H:i:s");
?>
出力結果(例):
世界標準時(UTC): 2026-02-05 01:15:30
日本時間(Tokyo): 2026-02-05 10:15:30
このように、同じ「今」という時間でも、タイムゾーンを指定するだけでPHPが自動的に時差(日本の場合は+9時間)を計算してくれます。Webアプリで「予約時間」や「注文日時」を扱う際は、必ずこのタイムゾーンを意識する癖をつけましょう。これだけで、運用後のトラブルを未然に防ぐことができます。
7. 実際の開発で役立つ日時操作の応用例(カウントダウン、年齢計算、日数の差分)
PHPの DateTime クラスが真価を発揮するのは、単なる表示の変更だけでなく「未来や過去との比較」を行うときです。実務では、単に日付を出すよりも「あと何日?」「生まれてから何年?」といった、2つの日時の差を計算する処理が非常に多く使われます。
ここでは、プログラミングが初めての方でもコピペで使える、実用的な3つの応用パターンを詳しく解説します。キーワードは diff() メソッドです。これを使うと、複雑な計算を抜きにして、2つの日付の「違い」を簡単に取り出せます。
① イベントまでのカウントダウン(残り時間の計算)
キャンペーンの終了日やイベント当日まで、あとどれくらい時間があるかを表示する仕組みです。diff メソッドで取得した「差(DateInterval)」を format することで、残り日数を自由な形式で表示できます。
<?php
// 1. 今この瞬間の時間を取得
$now = new DateTime();
// 2. 目標となる未来の日時を設定(例:2026年のクリスマス)
$target = new DateTime("2026-12-25 00:00");
// 3. 2つの日時の「差」を計算する
$interval = $now->diff($target);
// 4. %a(総日数)、%H(時間)などの専用記号で出力
echo "クリスマスまで残り: " . $interval->format('%a日と %H時間 %I分 %S秒');
?>
② ユーザーの誕生日から年齢を自動計算する
会員登録フォームなどでよく使われる機能です。手動で年齢を更新しなくても、今日の日付と誕生日を比較して、自動的に「現在の年齢」を算出できます。$interval->y と書くだけで、経過した「年」の数値だけをピンポイントで取得可能です。
<?php
// ユーザーの誕生日を設定
$birthdate = new DateTime("2000-01-01");
$now = new DateTime();
// 誕生日と今日の差を出す
$age_interval = $now->diff($birthdate);
// 「y」は経過した年数を表すプロパティです
echo "現在の年齢は " . $age_interval->y . " 歳です";
?>
③ 締切日や有効期限までの残り日数チェック
「このクーポンはあと何日で切れるか」といった判定です。$interval->days を使うと、細かい時間(時・分)を無視して「合計で何日差があるか」という整数を簡単に扱えるため、条件分岐(もしあと3日以内なら通知するなど)に非常に便利です。
<?php
// 締切日を設定
$deadline = new DateTime("2026-03-31");
$now = new DateTime();
// 差分を取得
$diff = $now->diff($deadline);
// 残り日数を数値で表示
echo "締切まであと " . $diff->days . " 日です";
?>
diff() メソッドを使うと、うるう年や月ごとの日数の違い(30日か31日か)を一切気にせず、PHPが正確に計算してくれます。人間がカレンダーを見て数える手間を、すべて自動化できるのが DateTime クラスの強みです。
このように、DateTime クラスを使いこなすことで、Webサイトに「動き」や「パーソナライズされた情報」を加えることができます。まずはサンプルを動かしてみて、日付を変えるとどう表示が変わるか試してみてください。
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での日付操作も怖くなくなりました!」