PHPの日時フォーマット完全ガイド!よく使う書式と実例をやさしく解説

PHP

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:英語の曜日短縮

コメント

タイトルとURLをコピーしました