mktime
(PHP 4, PHP 5)
mktime — 日付を Unix のタイムスタンプとして取得する
説明
int mktime
([ int $hour = date("H")
[, int $minute = date("i")
[, int $second = date("s")
[, int $month = date("n")
[, int $day = date("j")
[, int $year = date("Y")
[, int $is_dst = -1
]]]]]]] )
引数は右から順に省略することができます。省略された引数は、
ローカルの日付と時刻に従って、現在の値にセットされます。
注意
注意 :
PHP 5.1 以降、引数なしでコールすると mktime()
は E_STRICT notice を発行するようになりました。かわりに
time() 関数を使用しましょう。
パラメータ
hour
month 、day と year
で決まる日付の 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 の間です。しかし、PHP 5.1.0 より前のバージョンではこの範囲が
1970 から 2038 に制限されているシステム (たとえば Windows) もありました。
is_dst
このパラメータはサマータイム (DST) の時に1にセットされ、
そうでない時に0、サマータイムであるかどうかが不明である場合に-1
にセットされます。
不明な場合、PHP はサマータイムかどうか推測しようとします。
PHP を実行しているシステムで DST が有効になっている、もしくは
is_dst が 1 にセットされている場合、
一部の時刻は有効になりません。
もし DST が有効で例えば 2:00 の場合、2:00 から 3:00 までの全ての時刻は
無効になり、mktime() は不確定な値 (通常は負数)
を返します。いくつかのシステム (例えば Solaris 8) は真夜中に DST
を有効にしますので、DST が有効なときの 0:30 は前日の 23:30
と評価されます。
注意 :
PHP 5.1.0 以降、このパラメータは廃止されました。その結果、
新しいタイムゾーン処理機能がかわりに使用されます。
返り値
mktime() は与えられた引数の Unix
タイムスタンプを返します。引数が不正な場合、
この関数は FALSE を返します(PHP 5.1 より前のバージョンでは
-1 を返していました)。
エラー / 例外
すべての日付/時刻関数は、
有効なタイムゾーンが設定されていない場合に E_NOTICE
を発生させます。また、システム設定のタイムゾーンあるいは環境変数
TZ を使用した場合には E_STRICT
あるいは E_WARNING を発生させます。
date_default_timezone_set() も参照ください。
例
例1 mktime() の基本的な例
<?php // デフォルトのタイムゾーンを設定します。PHP 5.1 以降で使用可能です 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 strftime ( "Last day in Feb 2000 is: %d" , $lastday ); $lastday = mktime ( 0 , 0 , 0 , 4 , - 31 , 2000 ); echo strftime ( "Last day in Feb 2000 is: %d" , $lastday ); ?>
注意
警告
PHP 5.1.0 より前のバージョンでは、負の値のタイムスタンプは Windows の
どのバージョンにおいてもサポートされていませんでした。
したがって、年の有効範囲は 1970 年から 2038 年の間のみに限定されていました。