【PHP】strtotime関数の便利な使い方

  • このエントリーをはてなブックマークに追加

PHPで日付や時間を扱う際に頻繁に利用する「strtotime関数」
真面目にドキュメントを読めば良いのですが、現場で対応していると「目的の機能を実装するためにコピペ」というパターンも多いかと思います。

ちょっと真面目に調べてみたら、意外と便利な関数でした!

strtotime関数ですが、説明としては「 英文形式の日付(時間)を Unix タイムスタンプに変換する 」ということになります。
雑に言ってしまえば「様々な表記の日付(時間)を扱える」ということです。

「様々な表記」というと「2019/01/01」や「2019年1月1日」、「2019-01-01」とかを想像しがちですね。
(2019年1月1日は英文形式じゃないだろうというのは一旦置いといて)

時間形式となるとあまり思いつきませんが…「AM09:00」や「23:55」など、12時間表記と24時間表記などがあるでしょうか。

そして今回扱う「strtotime関数」ですが、以下のような表記も利用可能です!

  • strtotime(“now”)
  • strtotime(“1 January 2019”)
  • strtotime(“next Thursday”)
  • strtotime(“last Monday”)

「now」や「1 January 2019」は想定の範囲内ですが…

「next Thursday」「last Monday」もOKだって!?
ドキュメント内にこの記述を見つけたとき、目から鱗が落ちました。

必死に今日が●曜日で、次の○曜日を表示したいから■日足して…
なんてことをしないでも大丈夫です!素敵!!

必死に今日が●曜日で、前の○曜日を表示したいから…
あれ、でも○曜日は■曜日のパターンもあるし…どうすれば良いんだ!?
なんてことをしないでも大丈夫です!素敵!!

実際に利用する場合には以下のようになるかと思います。

$week = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
date('Y/m/d', strtotime('last ' . $week[$hoge] , $now->getTimestamp()))

ここまで触れていませんでしたが、strtotime関数は引数が1つまたは2つ指定できます。

第一引数:日時の文字列
これは先ほどご紹介したとおり、様々なフォーマットを扱えます。

第二引数:タイムスタンプ(int)
基準となるタイムスタンプを指定します。

「next Monday」と言われても、どこを基準にした「次の月曜日」なのかわかりません。
第二引数にタイムスタンプを指定することで、基準が明確になるわけですね。

例えば…

strtotime('last Monday' , $now->getTimestamp())

このように指定すると、「今日を基準にした、最後の月曜日」となるわけです。
基準になる日を変更すれば「○月✖日の直前の月曜日」も簡単に表示できます。

date関数は、UNIXタイムスタンプしか扱えませんので、通常strtotime関数とセットで利用しているかと思います。

その部分の表記を変更することで、簡単に直前の○曜日が表示されるようになりますね。
ポイントとしては「last」の後の半角スペース…でしょうか。
意外と見落としてしまいがちなので注意しておきましょう。

…ちゃんとドキュメントを読むことが、最適解への近道ですよ!
という自戒の内容でした。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*