日付・時間


現在日付、時刻、曜日を取得する(date)

date()を使います。引数に特定のフォーマットで設定することで目的の値を取得します。date_default_timezone_set()を設定しないと警告が出ます。

フォーマットのパターンはいくつかあります(0を省略、月や曜日の出力を3文字表記など)。
詳しいフォーマットはhttp://www.php.net/manual/ja/function.date.phpをご覧ください。

Y 4桁 例) 2013 y 2桁 例) 13
m 0あり 例) 01 n 0なし 例) 1
F 英語フル 例) January M 英語3文字 例) Jan t 月の日数 例) 1月なら31
d 0あり 例) 08 j 0なし 例) 8 z 年間日数 例) 137
h 0あり12時間 例) 15時なら 03 g 0なし12時間 例) 15時なら 3
H 0あり24時間 例) 15時なら 15 G 0なし24時間 例) 15時なら 15
i 0あり 例) 05
s 0あり 例) 05
曜日 l 英語フル 例) Saturday D 英語3文字 例) Sat
w 0〜6の数値。日曜が0 例) 土曜なら6 W 年間の週数 例) 20
午前午後 A 大文字 AM or PM a 小文字 am or pm
// タイムゾーンの指定
date_default_timezone_set('Asia/Tokyo');
echo date('Y/m/d D H:i:s') . "\n";    // => 例) 2013/05/18 Sat 15:51:29

UNIX秒を取得する(time)

time()を使います。UNIX秒とは1970年1月1日0時0分0秒からの秒数です。

echo time() . "\n";    // => 1368848022

日付からUNIX秒を取得する(mktime)

mktime()を使います。引数の順番は(hour,minute,second, month,day,year)なので注意が必要です。

// 2013年4月5日 1時2分3秒
// 引数  (hour,minute,second, month,day,year)
echo mktime(1,2,3,4,5,13) . "\n";    // => 1365091323

昨日、今日、明日の日付を取得する(strtotime)

strtotime()を使います。今日の日に+1しても良いですが月の最初や最後の日の前後の算出はけっこう面倒なのでこれは助かります。
(時間の単位に注意)

echo date('Y-m-d H:i:s', strtotime("yesterday")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-21 00:00:00
echo date('Y-m-d H:i:s', strtotime("today")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-22 00:00:00
echo date('Y-m-d H:i:s', strtotime("tomorrow")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-23 00:00:00

今日を基準として任意の日付を取得する(strtotime)

strtotime()を使います。引数に+1dayや+1weekなど文字列で指定します。
(時間の単位に注意)

echo date('Y-m-d H:i:s', strtotime("now")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-22 12:34:56
echo date('Y-m-d H:i:s', strtotime("+1day")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-23 12:34:56
echo date('Y-m-d H:i:s', strtotime("+2week")) . "\n";    // => 今日が  2014-08-05  なら  2014-07-23 12:34:56
echo date('Y-m-d H:i:s', strtotime("+3year")) . "\n";    // => 今日が  2017-07-22  なら  2014-07-23 12:34:56
echo date('Y-m-d H:i:s', strtotime("last Friday")) . "\n";    // => 今日が  2014-07-22  なら  2014-07-18 00:00:00

(先月、翌月の)月末の日付を取得する

通常は以下のようにすれば取得できます。

echo date('Y-m-t',strtotime('now')) . '¥n';    // => 2016-10-31

しかし先月や翌月の末日を取得するときは注意が必要です。
例えば現在が31日の場合は以下のような結果を返し、直感に反した結果を返します。

// 2016-10-31前後の月の末日を取得してみると
echo date('Y-m-t',strtotime(date('2016-10-31') . '-2 month'));    // => 2016-08-31
echo date('Y-m-t',strtotime(date('2016-10-31') . '-1 month'));    // => 2016-10-31
echo date('Y-m-t',strtotime(date('2016-10-31') . ' 0 month'));    // => 2016-10-31
echo date('Y-m-t',strtotime(date('2016-10-31') . '+1 month'));    // => 2016-12-31
echo date('Y-m-t',strtotime(date('2016-10-31') . '+2 month'));    // => 2016-12-31

この場合は以下のように、まず1日の日付を取得してその後末日を取るようにすることで直感通りの末日を返してくれます。

// 2016-10-01を基準とすると
echo date('Y-m-t',strtotime(date('2016-10-01') . '-2 month'));    // => 2016-08-31
echo date('Y-m-t',strtotime(date('2016-10-01') . '-1 month'));    // => 2016-09-30
echo date('Y-m-t',strtotime(date('2016-10-01') . ' 0 month'));    // => 2016-10-31
echo date('Y-m-t',strtotime(date('2016-10-01') . '+1 month'));    // => 2016-11-30
echo date('Y-m-t',strtotime(date('2016-10-01') . '+2 month'));    // => 2016-12-31

// 一般的には以下のようにする
echo date('Y-m-t',strtotime(date('Y-m-01') . '+1 month'));

マイクロ秒単位で時間を計測する(microtime)

microtime()を使用します。引数をtrueで指定するとマイクロ秒単位で返してくれます。

$start = microtime(true);
for($i=0 ; $i<1000000 ; $i++){
    $val = $i/100;
}
$ellapsed = microtime(true) - $start;
echo "ellapsed time: $ellapsed \n";    // => 例) 0.12428617477417