まず、デフォルトで日本時間を取得しておきます。
1 |
date_default_timezone_set('Asia/Tokyo'); |
1. 現在の日付または時刻を表示する
日付または時刻の最も簡単な表示は、現在時刻を告げることです。
date()、またはstrftime()関数を使います。
書式
1 2 |
strftime (フォーマット, 日時);
date (フォーマット, 日時); |
何時ですか?
1 2 3 4 |
print "strftime() says: ";
print strftime('%c');
print "date() says: ";
print date('c'); |
上記は、以下のように出力されます。
出力結果
1 2 |
strftime() says: Mon Aug 13 13:00:00 2012
date() says: 2012-08-13T13:00:00+09:00 |
どちらの関数も、引数を2つとります。1番目は時刻、または日付の文字列がどのようにフォーマットされるかを制御します。2番めは何時、または何日に対して使うかを制御します。2番めの引数を省くと、time()関数の値、つまり現在時刻が適用されます。
date()でフォーマットされた日付の文字列を出力する
1 |
print date('m/d/y'); |
出力結果
1 |
08/13/12 |
strftime()でフォーマットされた日付の文字列を出力する
1 |
print strftime('%m/%d/%y'); |
出力結果
1 |
08/13/12 |
strftime()とdate()では、フォーマット文字が違うので注意。
それぞれのパラメーターは以下を参照。
date()のパラメーター
http://php.net/manual/ja/function.date.php
strftime()のパラメーター
http://php.net/manual/ja/function.strftime.php
2. 特定の日付または時刻を表示する
つぎに、2番めの引数を使って、特定の時間のためにフォーマットされた時間の文字列を出力してみます。この場合、エポックタイムスタンプを利用します。
エポックタイムスタンプとは?
通常、日時の計算を簡単にプログラミングするために、特定の時刻や日付を単一の値として扱います。つまり1970年1月1日から何秒経ったのかと言う数値。この値をエポックタイムスタンプといいます。1時間後の時間を求めるには、以下のようになります。
現在の時間が13:00だとすると、time()+60*60は、午後2時のエポックタイムスタンプと等しくなります。(60*60=3600、1時間の秒数)
1 2 3 4 |
print "strftime says(): ";
print strftime('%I:%M:%S', time() + 60*60);
print "date() says: ";
print date("h:i:s", time() + 60*60); |
3. strftime()とdate()の使い分け
date()および、strftime()関数はそれぞれ長所があります。
以下のように表示する場合は、strftime()のほうが簡単です。
1 2 3 4 |
print "strftime says(): ";
print strftime('Today is %m/%d/%y and the time is %I:%M:%S');
print "date() says: ";
print "Today is ".date('m/d/y'). " and the time is ".date('h:i:s'); |
出力結果
1 2 |
strftime says(): Today is 08/13/12 and the time is 03:09:31
date() says: Today is 08/13/12 and the time is 03:09:31 |
date()関数は、strftime()がしないような、うるう年の表示、DST表示、いくつかの値の先頭のゼロを省略するような書式をサポートしています。strftime()は、フォーマット文字がWindows上でサポートされませんが、date()を使えば、どこでも同じ動作になることが保証されています。通常は、date()を選ぶほうがベターなようです。
4. 相対的な日付や時間を利用する
4-1. mktime()を使う
日付と時刻の値を使って、他の時間をエポックタイムスタンプに変換してみます。
相対的な時間を使用する場合には、mktime()を利用します。
書式
1 |
mktime (時, 分, 秒, 月, 日, 年, サマータイム); |
mktime()の引数は全てオプションで、何も指定しない場合デフォルトは現在の日付と時間です。
1 |
echo mktime(); |
以下のエポックタイムスタンプを返します。
出力結果
1 |
1344840476 |
よって、1970/1/1から、1344840476秒後が、現在の日時となるわけです。
これを、日付で表示したい場合は、どうすればいいでしょうか。
1 |
echo date("m/d/y h:i:s", mktime()); |
出力結果
1 |
08/13/12 03:47:56 |
となるので、相対的な日時を出力したい場合は、mktime()の引数を変更すればいいわけです。
1 2 |
//2012年8月14日午後13:00:00を出力する
echo date("m/d/y H:i:s", mktime(13,00,00,8,14,2012)); |
出力結果
1 |
08/14/12 13:00:00 |
4-2. strtotime()を使う
相対的な時間の英語記述を解釈して適切なエポックタイムスタンプを返す関数です。strtotime()が従う文法は複雑すぎるらしいので、ザクっとだけ知っておこうと思う。
1 2 3 4 5 6 |
//今日は2012年8月13日です。
$now = time();
$later = strtotime('Thursday',$now);
$before = strtotime('last thursday',$now);
print strftime("次の木曜日は、%c",$later);
print strftime("先週の木曜日は、%c",$before); |
出力結果
1 2 |
次の木曜日は、Thu Aug 16 00:00:00 2012
先週の木曜日は、Thu Aug 9 00:00:00 2012 |