PHPでウェブサイトやアプリを作っていると、日付や時刻を表示する場面がとても多くありますよね。
でも「フォーマットってどう書くの?」「曜日を表示したいけど方法がわからない」と困ったことはありませんか?
この記事では、PHPで日時をきれいに表示する方法を、初心者の方でもわかるように実例をたくさん使って説明します。
記事を読み終わる頃には、自分の思い通りの日時表示ができるようになりますよ。
一緒に学んでいきましょう!
日時フォーマットとは何か?

日時フォーマットの基本的な考え方
日時フォーマットとは、年月日や時間を表示するときの「見た目の形」を決める方法です。
同じ日時でも、いろいろな表示方法があります。
例:2025年6月3日 午後2時30分の場合
2025-06-03 14:30:00
(システム向け)2025年6月3日 14時30分
(日本語風)June 3, 2025 2:30 PM
(英語風)2025/06/03 14:30
(短縮形)
使う場面や目的によって、一番適した表示方法を選ぶことが大切です。
PHPで日時フォーマットを扱う方法
PHPには、日時フォーマットを扱うための便利な機能が用意されています:
1. date()関数 一番シンプルで使いやすい方法です:
<?php
echo date("Y-m-d H:i:s");
// 結果: 2025-06-03 14:30:00
?>
2. DateTimeクラス より柔軟で高機能な方法です:
<?php
$datetime = new DateTime();
echo $datetime->format("Y-m-d H:i:s");
// 結果: 2025-06-03 14:30:00
?>
フォーマット記号の仕組み
PHPでは、アルファベット1文字で日時の各部分を表します。たとえば:
Y
= 年(4桁)m
= 月(2桁)d
= 日(2桁)
これらを組み合わせることで、好きな形の日時表示を作ることができます。
まずは基本的な仕組みがわかったところで、具体的なフォーマット記号を覚えていきましょう。
よく使うフォーマット記号を覚えよう

年・月・日を表す記号
日付を表示するときによく使う記号から覚えていきましょう。
年を表す記号
<?php
echo date("Y"); // 2025 (4桁の年)
echo date("y"); // 25 (2桁の年)
?>
月を表す記号
<?php
echo date("m"); // 06 (2桁の月、ゼロ埋め)
echo date("n"); // 6 (1桁の月、ゼロなし)
echo date("F"); // June (英語の月名フル)
echo date("M"); // Jun (英語の月名短縮)
?>
日を表す記号
<?php
echo date("d"); // 03 (2桁の日、ゼロ埋め)
echo date("j"); // 3 (1桁の日、ゼロなし)
?>
時・分・秒を表す記号
時刻を表示するときの記号も覚えておきましょう。
時間を表す記号
<?php
echo date("H"); // 14 (24時間制、2桁)
echo date("G"); // 14 (24時間制、1桁)
echo date("h"); // 02 (12時間制、2桁)
echo date("g"); // 2 (12時間制、1桁)
echo date("A"); // PM (午前午後、大文字)
echo date("a"); // pm (午前午後、小文字)
?>
分・秒を表す記号
<?php
echo date("i"); // 30 (分、2桁)
echo date("s"); // 45 (秒、2桁)
?>
曜日を表す記号
曜日の表示も便利な機能です。
<?php
echo date("l"); // Tuesday (英語の曜日フル)
echo date("D"); // Tue (英語の曜日短縮)
echo date("w"); // 2 (曜日番号、日曜=0)
echo date("N"); // 2 (曜日番号、月曜=1)
?>
実用的な組み合わせ例
これらの記号を組み合わせて、よく使われる表示形式を作ってみましょう。
日本でよく使われる形式
<?php
echo date("Y年m月d日"); // 2025年06月03日
echo date("Y/m/d H:i"); // 2025/06/03 14:30
echo date("m月d日(D) H:i"); // 06月03日(Tue) 14:30
?>
システムでよく使われる形式
<?php
echo date("Y-m-d H:i:s"); // 2025-06-03 14:30:45
echo date("Y-m-d"); // 2025-06-03
echo date("H:i:s"); // 14:30:45
?>
英語圏でよく使われる形式
<?php
echo date("F j, Y"); // June 3, 2025
echo date("l, F j, Y g:i A"); // Tuesday, June 3, 2025 2:30 PM
echo date("M j, Y"); // Jun 3, 2025
?>
記号の組み合わせ方がわかれば、どんな表示形式でも作ることができます。次は、より便利なDateTimeクラスの使い方を学んでみましょう。
DateTimeクラスでもっと便利に

DateTimeクラスの基本的な使い方
date()関数も便利ですが、DateTimeクラスを使うとさらに柔軟な日時操作ができます。
基本的な作成方法
<?php
// 現在の日時を取得
$datetime = new DateTime();
echo $datetime->format("Y-m-d H:i:s");
// 結果: 2025-06-03 14:30:45
// 特定の日時を指定
$datetime = new DateTime("2025-12-25 09:00:00");
echo $datetime->format("Y年m月d日 H時i分");
// 結果: 2025年12月25日 09時00分
?>
いろいろな日時の指定方法
DateTimeクラスでは、柔軟な方法で日時を指定できます。
文字列で指定
<?php
$dt1 = new DateTime("2025-06-03");
$dt2 = new DateTime("next Monday");
$dt3 = new DateTime("last Friday");
$dt4 = new DateTime("+1 week");
echo $dt1->format("Y-m-d"); // 2025-06-03
echo $dt2->format("Y-m-d"); // 次の月曜日
echo $dt3->format("Y-m-d"); // 前の金曜日
echo $dt4->format("Y-m-d"); // 1週間後
?>
タイムスタンプから作成
<?php
$timestamp = 1717401045; // UNIXタイムスタンプ
$datetime = new DateTime();
$datetime->setTimestamp($timestamp);
echo $datetime->format("Y-m-d H:i:s");
?>
タイムゾーンの指定
世界各地の時刻を扱うときは、タイムゾーンの指定が重要です。
日本時間で表示
<?php
$tokyo = new DateTime("now", new DateTimeZone("Asia/Tokyo"));
echo $tokyo->format("Y-m-d H:i:s");
// 結果: 2025-06-03 14:30:45 (日本時間)
$utc = new DateTime("now", new DateTimeZone("UTC"));
echo $utc->format("Y-m-d H:i:s");
// 結果: 2025-06-03 05:30:45 (UTC時間)
?>
タイムゾーンの変換
<?php
$datetime = new DateTime("2025-06-03 14:30:00", new DateTimeZone("Asia/Tokyo"));
echo "日本時間: " . $datetime->format("Y-m-d H:i:s") . "\n";
// ニューヨーク時間に変換
$datetime->setTimezone(new DateTimeZone("America/New_York"));
echo "NY時間: " . $datetime->format("Y-m-d H:i:s") . "\n";
?>
便利なメソッド
DateTimeクラスには、他にも便利なメソッドがたくさんあります。
今日、昨日、明日を取得
<?php
$today = new DateTime();
$yesterday = new DateTime("yesterday");
$tomorrow = new DateTime("tomorrow");
echo "今日: " . $today->format("Y-m-d") . "\n";
echo "昨日: " . $yesterday->format("Y-m-d") . "\n";
echo "明日: " . $tomorrow->format("Y-m-d") . "\n";
?>
月の最初と最後を取得
<?php
$first = new DateTime("first day of this month");
$last = new DateTime("last day of this month");
echo "今月最初: " . $first->format("Y-m-d") . "\n";
echo "今月最後: " . $last->format("Y-m-d") . "\n";
?>
DateTimeクラスを使えば、複雑な日時操作も簡単にできるようになります。次は、日時の計算や比較の方法を学んでみましょう。
日時の計算と比較をマスターしよう

日時の加算・減算
DateTimeクラスを使えば、日時の計算がとても簡単にできます。
modify()メソッドを使った計算
<?php
$datetime = new DateTime("2025-06-03 14:30:00");
// 日付を進める
$datetime->modify("+3 days");
echo $datetime->format("Y-m-d H:i:s"); // 2025-06-06 14:30:00
$datetime->modify("+2 hours");
echo $datetime->format("Y-m-d H:i:s"); // 2025-06-06 16:30:00
$datetime->modify("+30 minutes");
echo $datetime->format("Y-m-d H:i:s"); // 2025-06-06 17:00:00
?>
日付を戻す計算
<?php
$datetime = new DateTime("2025-06-03 14:30:00");
$datetime->modify("-1 week");
echo $datetime->format("Y-m-d"); // 2025-05-27
$datetime->modify("-2 months");
echo $datetime->format("Y-m-d"); // 2025-03-27
$datetime->modify("-1 year");
echo $datetime->format("Y-m-d"); // 2024-03-27
?>
DateIntervalを使った正確な計算
より正確な計算をしたい場合は、DateIntervalクラスを使います。
<?php
$datetime = new DateTime("2025-06-03");
// 1ヶ月後を計算
$interval = new DateInterval("P1M"); // P1M = Period 1 Month
$datetime->add($interval);
echo $datetime->format("Y-m-d"); // 2025-07-03
// 2週間前を計算
$interval = new DateInterval("P2W"); // P2W = Period 2 Weeks
$datetime->sub($interval);
echo $datetime->format("Y-m-d"); // 2025-06-19
?>
DateIntervalの記法
P
= Period(期間の開始)Y
= Years(年)M
= Months(月)W
= Weeks(週)D
= Days(日)T
= Time(時間部分の開始)H
= Hours(時間)M
= Minutes(分)S
= Seconds(秒)
<?php
// 1年2ヶ月3日4時間5分6秒後
$interval = new DateInterval("P1Y2M3DT4H5M6S");
?>
日時の比較
DateTimeオブジェクト同士は、直接比較演算子で比較できます。
基本的な比較
<?php
$date1 = new DateTime("2025-06-01");
$date2 = new DateTime("2025-06-03");
if ($date1 < $date2) {
echo "date1の方が早い日付です";
}
if ($date1 == $date2) {
echo "同じ日付です";
}
if ($date1 > $date2) {
echo "date1の方が遅い日付です";
}
?>
今日との比較
<?php
$targetDate = new DateTime("2025-12-25");
$today = new DateTime();
if ($targetDate > $today) {
echo "未来の日付です";
} elseif ($targetDate < $today) {
echo "過去の日付です";
} else {
echo "今日です";
}
?>
日時の差を計算する
2つの日時の間隔を計算することもできます。
<?php
$start = new DateTime("2025-06-01");
$end = new DateTime("2025-06-10");
$diff = $start->diff($end);
echo "差は " . $diff->days . " 日です"; // 差は 9 日です
echo "差は " . $diff->format("%d") . " 日です"; // 差は 9 日です
// より詳細な情報
echo $diff->y . "年 "; // 年の差
echo $diff->m . "ヶ月 "; // 月の差
echo $diff->d . "日 "; // 日の差
echo $diff->h . "時間 "; // 時間の差
echo $diff->i . "分 "; // 分の差
echo $diff->s . "秒"; // 秒の差
?>
実用的な例:年齢計算
<?php
function calculateAge($birthday) {
$birth = new DateTime($birthday);
$today = new DateTime();
$age = $birth->diff($today);
return $age->y; // 年齢を返す
}
echo calculateAge("1990-05-15") . "歳"; // 35歳
?>
日時の計算や比較ができるようになると、予約システムや期限管理など、いろいろな機能を作ることができます。次は、フォーマットを使うときの注意点を確認しましょう。
注意点とよくある間違い

タイムゾーンに関する注意点
日時を扱うときに一番注意が必要なのがタイムゾーンです。
date()関数の落とし穴
<?php
// サーバーのタイムゾーン設定に依存する
echo date("Y-m-d H:i:s"); // サーバーの設定次第で結果が変わる
// 明示的にタイムゾーンを設定
date_default_timezone_set("Asia/Tokyo");
echo date("Y-m-d H:i:s"); // 日本時間で確実に表示
?>
おすすめの対処法
<?php
// DateTimeクラスでタイムゾーンを明示
$datetime = new DateTime("now", new DateTimeZone("Asia/Tokyo"));
echo $datetime->format("Y-m-d H:i:s");
?>
フォーマット記号の間違いやすいポイント
大文字と小文字の区別
<?php
echo date("Y"); // 2025 (4桁の年)
echo date("y"); // 25 (2桁の年)
echo date("M"); // Jun (月名短縮)
echo date("m"); // 06 (月番号)
echo date("D"); // Tue (曜日短縮)
echo date("d"); // 03 (日付)
?>
似ている記号の違い
<?php
// 分は "i"、月は "m"
echo date("H:i"); // 14:30 (正しい)
echo date("H:m"); // 14:06 (間違い、月が表示される)
// 12時間制と24時間制
echo date("H:i"); // 14:30 (24時間制)
echo date("h:i A"); // 02:30 PM (12時間制)
?>
日本語表示の注意点
PHPの標準機能では、日本語の曜日や月名は直接表示できません。
英語で表示される例
<?php
echo date("l"); // Tuesday(英語)
echo date("F"); // June(英語)
?>
日本語で表示したい場合の対処法
<?php
function getJapaneseDay($date) {
$days = ["日", "月", "火", "水", "木", "金", "土"];
$dayOfWeek = date("w", strtotime($date));
return $days[$dayOfWeek];
}
function getJapaneseMonth($date) {
$months = [
1 => "1月", 2 => "2月", 3 => "3月", 4 => "4月",
5 => "5月", 6 => "6月", 7 => "7月", 8 => "8月",
9 => "9月", 10 => "10月", 11 => "11月", 12 => "12月"
];
$month = date("n", strtotime($date));
return $months[$month];
}
$date = "2025-06-03";
echo date("Y年", strtotime($date));
echo getJapaneseMonth($date);
echo date("d日", strtotime($date));
echo "(" . getJapaneseDay($date) . ")";
// 結果: 2025年6月03日(火)
?>
パフォーマンスの注意点
DateTimeオブジェクトの再利用
<?php
// 非効率的:毎回新しいオブジェクトを作成
for ($i = 0; $i < 1000; $i++) {
$dt = new DateTime();
echo $dt->format("Y-m-d");
}
// 効率的:オブジェクトを再利用
$dt = new DateTime();
for ($i = 0; $i < 1000; $i++) {
echo $dt->format("Y-m-d");
}
?>
セキュリティ上の注意点
ユーザー入力をそのまま使わない
<?php
// 危険:ユーザー入力をそのまま使用
$userInput = $_GET['date']; // 2025-06-03
$datetime = new DateTime($userInput); // 危険
// 安全:バリデーションを行う
function createSafeDateTime($input) {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $input)) {
try {
return new DateTime($input);
} catch (Exception $e) {
return null; // 無効な日付
}
}
return null; // 形式が正しくない
}
$datetime = createSafeDateTime($_GET['date']);
if ($datetime) {
echo $datetime->format("Y-m-d");
} else {
echo "無効な日付です";
}
?>
これらの注意点を守ることで、安全で正確な日時処理ができるようになります。
まとめ
PHPでの日時フォーマットは、ウェブ開発に欠かせない重要なスキルです。この記事で学んだ内容を整理してみましょう。
重要なポイント
date()
関数は簡単だが、DateTime
クラスの方が高機能- フォーマット記号を覚えれば、どんな表示形式でも作れる
- タイムゾーンの指定は必ず行う
- 日時の計算や比較もDateTimeクラスで簡単にできる
- セキュリティとパフォーマンスに注意する
よく使うフォーマット記号(復習)
Y
:4桁の年、m
:2桁の月、d
:2桁の日H
:24時間制の時、i
:分、s
:秒l
:英語の曜日フル、D
:英語の曜日短縮
コメント