strtotime()
はUnixタイムスタンプを返す組み込み関数。日時の文字列を渡すとそれに応じたUNIXタイムスタンプを返してくれる。
- strtotime(“1999-12-31 23:59:59”);//946652399
で、strtotime()
は日時以外に、様々な相対日時を指定可能になっている。strtotime( "yesterday" )
とやると前日の午前0時0分0秒のUNIXタイムスタンプが返ってくる。これをdate()
関数と組み合わせて使うことで、相対日時を簡単に取得することができる。
- date(“Y-m-d H:i:s”, strtotime(“yesterday”));//ex 2011-10-27 00:00:00
以下はstrtotime()
で使える日時指定のリスト。
現在日時
- strtotime(“now”);
昨日明日、一昨日、明後日など前後の日付
- strtotime(“+1 day”);//明日
- strtotime(“+2 day”);//明後日
- strtotime(“+10 day”);//10日後
- strtotime(“+365 day”);//365日後
- strtotime(“1 day”);//+は省いても構わない
- strtotime(“-1 day”);//昨日
- strtotime(“-2 day”);//一昨日
- strtotime(“-10 day”);//10日前
- strtotime(“-365 day”);//365日前
昨日今日明日の0時0分0秒
- strtotime(“today”);//今日の0時0分0秒
- strtotime(“yesterday”);//昨日の0時0分0秒
- strtotime(“tomorrow”);//明日の0時0分0秒
- strtotime(“yesterday 15:00:00”);//昨日の15時0分0秒
strtotime( "+1 day" )
が現在時のちょうど24時間後になるのに対し、strtotime( "tomorrow" )
だと明日の0時0分0秒が得られる。たまにstrtotime( "tomorrow" )
code>と
strtotime( "+1 day" )
は同じと書いているのを見かけるが間違い。異なった数値が返ってくるので使い分ける。 strtotime( "now" ) - strtotime( "today" )
で今日が始まって何秒経過したとかできて便利。
正午
- strtotime("noon");//今日の12時0分0秒
- strtotime("yesterday noon");//昨日正午
週
- strtotime("+1 week");//1週間後
- strtotime("+10 week");//10週後
- strtotime("-1 week");//1週間前
- strtotime("-10 week");//10週前
月
- strtotime("+1 month");//来月1日の0時0分0秒。
- strtotime("+2 month");//再来月1日の0時0分0秒。
- strtotime("-1 month");//先月1日の0時0分0秒。
- strtotime("-2 month");//2カ月前1日の0時0分0秒。
- strtotime("2013-07");//2013年7月1日0時0分0秒。
- strtotime("january");//今日が28日だとすると、今年の1月28日の0時0分0秒。
- strtotime("2013-08-01 +1 month");//2013年9月1日の0時0分0秒
- strtotime("2013-08-31 +1 month");//2013年10月1日の0時0分0秒になってしまう!
- strtotime("2013-08 +1 month");//2013年9月1日の0時0分0秒
日を指定せず、YYYY-MMを与えるとその月の1日になり、Januaryのように英語月名を与えると今日の日付になる。
+1 month
を使う時は、日付まで指定して使うと予想外の値になる場合がある。例えば、strtotime( "2013-08-31 +1 month" )
とすると、返ってくる値は2013-09-30ではなく2013-10-01である。strtotime( "2013-08-30 +1 month" )
なら2013-09-
30になる。どうやら+1 month
は、単純に月に1を足しているだけのもよう。つまり、2013-08-31という値を+1 monthすると、まず2013-09-31という文字列を作成し、次いでこれを2013-10-01に変換しているようなのだ。よって、月送りには日付を指定せずに使うのが良い。
月初・月末
- strtotime("first day of 2013-07-10");//2013年7月1日0時0分0秒。
- strtotime("
first day of january");//first dayは年を省き月だけの指定も可能。この場合は今年の1月1日0時0分0秒。 - strtotime("first day of 2013-07");//これでもOK
- strtotime("last day of 2013-07-01");//2013年7月31日の0時0分0秒。
- strtotime("last day of january");//今年の1月31日0時0分0秒。
- strtotime("last day of 2013-07");//2013年7月31日の0時0分0秒。
- strtotime("first day of next month");//来月1日0時0分0秒。
月末日は月によってバラバラなので、last day ofは非常に便利。「月」の項目でも説明したが、strtotime("2013-08-31 +1 month")
は10月1日になってしまう。2013年8月の翌月の末日を得たい場合は、strtotime( "last day of 2013-08 +1 month" )
とする。これで2013-09-30が得られる。
ただし、PHPのバージョンによっては(5.4.4以前?)、first day ofとlast day ofは動かない。確実に月初や月末を得たい場合はmktime()
を使う方が良い。mktime()
の第5引数を0にすると、前の月の末日が得られる。
年
- strtotime("+1 year");//現在日時の1年後. 今が2014年1月1日10時ちょうどなら返り値は'2015-01-01 10:00:00'
- strtotime("-1 year");//現在日時の1年前. 今が2014年1月1日10時ちょうどなら返り値は'2013-01-01 10:00:00'
- strtotime("last year");// "-1 year"と同じ
- strtotime("next year");// "+1 year"と同じ
- //特定の時刻が得たいなら以下の書き方が可能
- strtotime("+1 year 00:00:00");//現在日時の1年後の0時0分0秒になる01-01 10:00:00'
曜日
- strtotime("next sunday");//次の日曜の0時0分0秒
- strtotime("+2 sunday");//次の次の日曜0時0分0秒
- strtotime("last sunday");//前の日曜の0時0分0秒
- strtotime("-3 sunday");//3回前の日曜0時0分0秒
- strtotime("next sun");//略称でもOK
- strtotime("first sun of 2011-10"
);//指定した月の最初の日曜の日付。時間は0時0分0秒 - strtotime("second sun of 2011-10");//指定した月の2つめの日曜の日付
- strtotime("last sun of 2011-10"));//指定した月の最後の日曜の日付
- strtotime("first sun of october 2011");//この書き方でもOK
時分秒
- strtotime("+5 sec");//5秒後
- strtotime("+5 min");//5分後
- strtotime("+1 hour");//1時間後
- strtotime("-5 sec");//5秒前
- strtotime("-5 min");//5分前
- strtotime("-1 hour");//1時間前
- strtotime("+5 second");//秒はsec・secondどちらでも可
- strtotime("+5 minute");//分もmin・minuteどちらも可
組み合わせ
- strtotime("+1 month +1 day +1 hour +1 minute");//1カ月と1日と1時間1分後