International PHP Conference Berlin 2025

mktime

(PHP 4, PHP 5, PHP 7, PHP 8)

mktime日付を Unix のタイムスタンプとして取得する

説明

mktime(
    int $hour,
    ?int $minute = null,
    ?int $second = null,
    ?int $month = null,
    ?int $day = null,
    ?int $year = null
): int|false

与えられた引数に従って UNIX のタイムスタンプを返します。 このタイムスタンプは、Unix epoch(1970年1月1日00:00:00 GMT)から 指定された時刻までの通算秒を表す長整数です。

省略されたり、null が指定されたオプションの引数は、 ローカルの日付と時刻に従って、現在の値にセットされます。

警告

引数の順番が変なので注意して下さい: month, day, year の順になっており、 理にかなった year, month, day の順になっていません。

引数なしで mktime() を呼び出すことはサポートされていません。 引数なしで呼び出すと、ArgumentCountError がスローされます。 現在のタイムスタンプを取得する目的には、time() が使えます。

パラメータ

hour

monthdayyear で決まる日付の 0 時から数えた「時」。負の値は、その日の 0 時から前にさかのぼった時間を表します。 23 より大きい値は、その翌日以降の該当する時間を表します。

minute

hour 時 0 分から数えた「分」。 負の値は、その前の時刻を表します。 59 より大きい値は、その次の時間以降の該当する時間を表します。

second

minute 分 0 秒から数えた「秒」。 負の値は、その前の時刻を表します。 59 より大きい値は、その次の分以降の該当する時間を表します。

month

前年末から数えた月数。1 から 12 までの場合は、カレンダーどおりのその年の「月」を表します。 (負の値を含めた) 1 より小さい値は、前年の月を逆順でたどります。 つまり 0 なら 12 月、-1 なら 11 月になるということです。 12 より大きい値は、その翌年以降の該当する月を表します。

day

前月末から数えた日数。1 から 28、29、30、31 (月によって異なる) までの場合は、その月の「日」を表します。 (負の値を含めた) 1 より小さい値は、前月の日を逆順でたどります。 つまり 0 なら前月の末日、-1 ならそのさらに前日になるということです。 その月の日数より大きい値は、翌月以降の該当する日を表します。

year

年。2 桁または 4 桁の値を指定可能で、 0-69 の間の値は 2000-2069 に、70-100 は 1970-2000 にマップされます。 今日最も一般的なシステム、すなわち time_t が 32 ビットの符号付き整数である システムでは year として有効な範囲は 1901 から 2038 の間です。

戻り値

mktime() は与えられた引数の Unix タイムスタンプを返します。 タイムスタンプの値が PHP の整数型に合わない場合は、false を返します。

変更履歴

バージョン 説明
8.0.0 hour は、オプションではなくなりました。 Unixタイムスタンプ が必要な場合、time() を使います。
8.0.0 minute, second, month, day, year は、nullable になりました。

例1 mktime() の基本的な例

<?php
// デフォルトのタイムゾーンを設定します。
date_default_timezone_set('UTC');

// 出力: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

// 出力例: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>

例2 mktime() の例

mktime() は入力日付の有効性を確認しており、 範囲外の入力を自動的に修正して計算してくれるので便利です。 例えば、以下の各行はいずれも文字列 "Jan-01-1998"を出力します。

<?php
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
echo
date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo
date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo
date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>

例3 月の末日

指定した月の最後の日は次の月の -1 番目の日ではなく、"0" 番目の日 として表すことが可能です。以下の例はともに文字列"The last day in Feb 2000 is: 29" を出力します。

<?php

$lastday
= mktime(0, 0, 0, 3, 0, 2000);
echo
'Last day in Feb 2000 is: ', date('d', $lastday);

$lastday = mktime(0, 0, 0, 4, -31, 2000);
echo
'Last day in Feb 2000 is: ', date('d', $lastday);

?>

参考

  • DateTimeImmutable
  • checkdate() - グレゴリオ暦の日付/時刻の妥当性を確認します
  • gmmktime() - GMT 日付から Unix タイムスタンプを取得する
  • date() - Unixタイムスタンプを書式化する
  • time() - 現在の Unix タイムスタンプを返す

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top