date 関数はよく使う割にすぐ忘れる。
なんでかなぁ。
PHP Manual:date
【環境】
PHP:5.3.1
書式
string date ( string $format [, int $timestamp = time() ] )
指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。 タイムスタンプが与えられない場合は、現在の時刻が使われます。 つまり timestamp はオプションであり そのデフォルト値は time() の値です。
戻り値:日時型文字列
第1引数:戻り値となる日時型文字列のフォーマット文字列
第2引数:タイムスタンプ。int 型
第2引数:$timestamp
タイムスタンプとは 1970年1月1日 09:00:00 (1970年1月1日 00:00:00 GMT) からの通算秒数である。
time
int time ( void )
現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。
PHP Manual:time
現在の日時のタイムスタンプを返す関数。
引数はなく、現在日時以外は求められない。
date 関数で第2引数をを省略すると自動的にこの time 関数が用いられる。
mktime
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 ]]]]]]] )
与えられた引数に従って UNIX のタイムスタンプを返します。
このタイムスタンプは、Unix epoch(1970年1月1日00:00:00 GMT)から 指定された時刻までの通算秒を表す長整数です。
引数は右から順に省略することができます。
省略された引数は、 ローカルの日付と時刻に従って、現在の値にセットされます。
PHP Manual:mktime
指定日時のタイムスタンプを返す関数。
このままだと見難いが、要は
<?php
mktime(時, 分, 秒, 月, 日, 年);
?>
ポイントとしては、時刻情報はいらなくて日付だけが欲しい場合でも
<?php
mktime(0, 0, 0, 20, 6, 2011);
?>
このように 時、分、秒 に 0 を設定しなければならない。
strtotime
int strtotime ( string $time [, int $now ] )
この関数は英語の書式での日付を含む文字列が指定されることを期待しており、
now で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。
now が指定されていない場合は現在日時に変換します。
この関数は、タイムスタンプを計算するために (利用可能であれば) 環境変数 TZ を使用します。
PHP 5.1.0 以降では、日付/時刻関数で 使用されるタイムゾーンを設定する簡単な方法があります。
その方法については date_default_timezone_get() 関数のページを参照ください。
PHP Manual:strtotime
文字列からタイムスタンプを返す関数。
有効な文字列書式は PHP Manual:サポートする日付と時刻の書式 。
難しいことを考えずに
<?php
strtotime('2011-06-20 00:00:00');
?>
と、MySQL の datetime または timestamp の書式を用いるようにしている。
末日を取得
date
「月」用の書式指定文字に t というのがあり、これは当該月の日数を返してくれる。
つまり、戻り値は 28~31 に限られるわけだけど、これを利用して
<?php
$strDate = date('Y-m-t');
?>
このようにすることで今月の最終日文字列を取得できる。
mktime
「日」に 0 を指定してやることで、前の月の最終日を返す。
<?php
$timestamp = mktime(0, 0, 0, date('m') + 1, 0, 2011);
?>
前の月の最終日なので、今月の最終日を知りたい場合は「月」を 1 増やしておく。