言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. date() / time() / mktime()

date() / time() / mktime()

対応: PHP 4(2000)

現在の日時やUNIXタイムスタンプを取得し、任意のフォーマットで日付文字列を生成します。PHPで日時を扱う最も基本的な関数群です。

構文

// 日時をフォーマットして文字列で返す
date($format, $timestamp);

// 現在のUNIXタイムスタンプを取得する
time();

// 指定した日時のUNIXタイムスタンプを生成する
mktime($hour, $minute, $second, $month, $day, $year);

// GMTの日時をフォーマットして返す
gmdate($format, $timestamp);

関数一覧

関数概要
date($format, $timestamp)日時をフォーマット文字列に従って整形します。第2引数を省略すると現在日時が使われます。
time()現在のUNIXタイムスタンプを秒単位の整数で返します。引数は取りません。
mktime($hour, $minute, $second, $month, $day, $year)指定した日時のUNIXタイムスタンプを返します。範囲外の値を指定すると自動的に繰り上げ・繰り下げされます。
gmdate($format, $timestamp)『date()』と同じ動作ですが、ローカルタイムゾーンではなくGMTで出力します。

主なフォーマット文字

文字意味
Y4桁の年2025
m0埋め2桁の月01〜12
d0埋め2桁の日01〜31
H0埋め2桁の時(24時間制)00〜23
i0埋め2桁の分00〜59
s0埋め2桁の秒00〜59
N曜日の番号(ISO-8601)1が月曜、7が日曜
w曜日の番号0が日曜、6が土曜
D曜日の英語略称Mon, Tue, Wed
UUNIXタイムスタンプtime() と同じ値

サンプルコード

sample_date.php
<?php
date_default_timezone_set('Asia/Tokyo');

// 現在の日付をフォーマットする
echo date("Y-m-d") . "\n"; // 『2025-04-15』のように出力される
echo date("Y年m月d日") . "\n"; // 『2025年04月15日』のように出力される

// 時刻を含めてフォーマットする
echo date("Y-m-d H:i:s") . "\n"; // 『2025-04-15 10:30:45』のように出力される

// 曜日を取得する
$week = ["日", "月", "火", "水", "木", "金", "土"];
echo $week[date("w")] . "\n"; // 現在の曜日が日本語で出力される

// time() で現在のタイムスタンプを取得する
echo time() . "\n"; // 『1744684245』のような整数が出力される

// 1時間後のタイムスタンプを計算する
$one_hour_later = time() + 3600;
echo date("H:i:s", $one_hour_later) . "\n"; // 現在の1時間後の時刻が出力される

// mktime() で特定の日時のタイムスタンプを生成する
$ts = mktime(0, 0, 0, 12, 31, 2025);
echo date("Y-m-d D", $ts) . "\n"; // 『2025-12-31 Wed』と出力される

// mktime() の繰り上げを利用して月末日を求める
$last_day = mktime(0, 0, 0, 4, 0, 2025); // 4月0日は3月末日として扱われる
echo date("Y-m-d", $last_day) . "\n"; // 『2025-03-31』と出力される

// gmdate() でGMTの時刻を取得する
echo gmdate("Y-m-d H:i:s") . "\n"; // 日本時間より9時間前の時刻が出力される

// 特定のイベント日から30日後を計算する
$event_ts = mktime(0, 0, 0, 4, 1, 2025); // 架空のイベント日
$thirty_days_later = $event_ts + (60 * 60 * 24 * 30);
echo date("Y-m-d", $thirty_days_later) . "\n"; // 30日後の日付が出力される

実行すると次のように出力されます。

php sample_date.php
2025-04-15
2025年04月15日
2025-04-15 10:30:45
火
1744684245
11:30:45
2025-12-31 Wed
2025-03-31
2025-04-15 01:30:45
2025-05-01

タイムゾーンが設定されていないと日本時間にならない

『date()』のデフォルトはサーバーの『php.ini』設定に依存します。日本時間を使う場合は『date_default_timezone_set('Asia/Tokyo')』を先頭で呼び出すか、『php.ini』の『date.timezone』を設定してください。

<?php
// タイムゾーン未設定のまま実行すると、UTC等になる場合があります
// echo date("Y-m-d H:i:s"); // サーバー設定次第で日本時間にならないことがあります

次のように記述します。

<?php
// タイムゾーンを明示的に設定します
date_default_timezone_set('Asia/Tokyo');
echo date("Y-m-d H:i:s"); // 日本時間が出力されます

date()は整数のタイムスタンプしか受け取れない

『date()』の第2引数には整数のUNIXタイムスタンプを渡します。文字列の日付を直接渡しても意図した結果にはなりません。文字列から日時を扱いたい場合は『strtotime()』で変換してください。

<?php
// 文字列を渡すとエラーまたは意図しない結果になります
// echo date("Y-m-d", "2025-04-15"); // 正しく動作しません

次のように記述します。

<?php
// 文字列の日付は strtotime() で整数に変換してから渡します
$ts = strtotime("2025-04-15"); // UNIXタイムスタンプに変換します
echo date("Y-m-d", $ts);

mktime()の引数の順序

『mktime()』の引数の順序は「時, 分, 秒, 月, 日, 年」です。年月日の順ではないため、混同しやすいポイントです。

<?php
// 間違いやすい例: 年月日の順で書いてしまうミス
// $ts = mktime(0, 0, 0, 2025, 4, 15); // 誤り: 月に2025を渡してしまいます

正しいコードは次の通りです。

<?php
// 正しい例: 時, 分, 秒, 月, 日, 年 の順です
$ts = mktime(0, 0, 0, 4, 15, 2025); // 2025年4月15日 0時0分0秒
echo date("Y-m-d", $ts);

実践パターン

経過日数の計算

特定のイベントから何日経過したかを計算する例です。

<?php
date_default_timezone_set('Asia/Tokyo');

// 架空のイベント日から経過日数を計算する
$event_ts = mktime(0, 0, 0, 1, 6, 2025);
$today_ts = mktime(0, 0, 0, (int) date("m"), (int) date("d"), (int) date("Y"));
$diff_days = (int) (($today_ts - $event_ts) / 86400);

echo "イベントから {$diff_days} 日が経過しました。\n";
sample_elapsed.php
php sample_elapsed.php
イベントから 89 日が経過しました。

月の最初と最後の日を取得

指定した月の初日と末日を取得する例です。

<?php
date_default_timezone_set('Asia/Tokyo');

$year = 2025;
$month = 4;

// 月の最初の日
$first_day = mktime(0, 0, 0, $month, 1, $year);
echo date("Y-m-d", $first_day) . "\n"; // 『2025-04-01』と出力される

// 翌月の0日 = 当月の末日
$last_day = mktime(0, 0, 0, $month + 1, 0, $year);
echo date("Y-m-d", $last_day) . "\n"; // 『2025-04-30』と出力される
sample_month_range.php
php sample_month_range.php
2025-04-01
2025-04-30

概要

『date()』はPHPで最もよく使われる日時関数で、フォーマット文字を組み合わせて任意の日付文字列を生成します。日本語のサイトでは『date("Y年m月d日")』のようにフォーマット文字以外の文字をそのまま含められる点が便利です。

『time()』が返すUNIXタイムスタンプは1970年1月1日0時0分0秒 UTCからの経過秒数です。タイムスタンプに秒数を加減算することで、未来や過去の日時を簡単に計算できます。タイムゾーンは php.inidate.timezone またはスクリプト内の date_default_timezone_set() で設定します。日本の場合は『Asia/Tokyo』を指定してください。

より柔軟な日時操作が必要な場合は『DateTime クラス』を、日付文字列のパースには『strtotime()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。