【PHP】strtotime で利用できるパラメータいろいろ
4月になったので心機一転ダイエットします!
思えば3月も心機一転しました。そういえば1月もしました。
…がんばります!
PHP 利用している人にはお馴染みの、「strtotime」という関数があります。
英文形式の日付を Unix タイムスタンプに変換してくれる、それはそれは便利な関数です。そしてこれがまた、凄く沢山の文字列をサポートしてて、上手くつかと色々を便利なのですが、ついつい忘れて毎回ググってしまっている自分がいます。
ということで、自分への備忘も兼ねて記事としてまとめてみようと思います。
基本
まずは strtotime の基本的な使い方。date 関数と組み合わせると便利ですね。 たとえばこんな感じ。
echo date("Y-m-d", strtotime("today"));
これで「2014-04-02」が出力されます。まあこれは「date("Y-m-d")」と同じですね。
ではこれ。
echo date("Y-m-d", strtotime("yesterday"));
ちゃんと「yesterday」を解釈し、昨日の日付「2014-04-01」を出力してくれます。
このように、きちんと解釈してくれる文字列が大量にあります。
いろいろ一気に紹介します。
日にち関連
echo date("Y-m-d", strtotime("+7 day")); // 7日後
echo date("Y-m-d", strtotime("-7 day")); // 7日前
echo date("Y-m-d", strtotime("today")); // 今日
echo date("Y-m-d", strtotime("yesterday")); // 昨日
echo date("Y-m-d", strtotime("tomorrow")); // 明日
echo date("Y-m-d H:i:s", strtotime("today 10:00:00")); // 今日の10時
echo date("Y-m-d H:i:s", strtotime("noon")); // 正午
echo date("Y-m-d H:i:s", strtotime("midnight")); // 0時
echo date("Y-m-d H:i:s", strtotime("tomorrow midnight")); // 明日の0時
"day"で日を指定できます。"+1 day"で「1日後」になります。数値を変更することで自由に変更可能です。
マイナスで指定すれば、「○日前」も指定できます。
また、"today"、"yesterday"、"tomorrow"、"noon"、"midnight" などなど、ちゃんと解釈してタイムスタンプにしてくれます。
半角スペースに続けて時間を指定すれば、「明日の正午」などを指定することができます。
週・月・年
echo date("Y-m-d", strtotime("+3 week")); // 3週間後
echo date("Y-m-d", strtotime("-3 week")); // 3週間前
echo date("Y-m-d", strtotime("+2 month")); // 2か月後
echo date("Y-m-d", strtotime("-2 month")); // 2か月前
echo date("Y-m-d", strtotime("+1 year")); // 1年後
echo date("Y-m-d", strtotime("-1 year")); // 1年前
"week"、"month"、"year" も分かりやすいですね。
"day" と同じく「+1」など数字を指定することで「○週間後」「○年前」などを取得する事ができます。
時・分・秒
echo date("Y-m-d H:i:s", strtotime("+30 sec")); // 30秒後
echo date("Y-m-d H:i:s", strtotime("-30 sec")); // 30秒前
echo date("Y-m-d H:i:s", strtotime("+10 min")); // 10分後
echo date("Y-m-d H:i:s", strtotime("-10 min")); // 10分前
echo date("Y-m-d H:i:s", strtotime("+3 hour")); // 3時間後
echo date("Y-m-d H:i:s", strtotime("-3 hour")); // 3時間前
「時・分・秒」なども基本的には同じです。
"sec"、"min"、"hour" を「+1」など数字で指定すれば、細かい時間を取得する事ができます。
曜日
echo date("Y-m-d", strtotime("next sunday")); // 次の日曜
echo date("Y-m-d", strtotime("last sunday")); // 直近の日曜
echo date("Y-m-d", strtotime("+5 sunday")); // 5回先の日曜
echo date("Y-m-d", strtotime("-5 sunday")); // 5回前の日曜
曜日も使い方でいろいろ取ってくることができます。
「次の日曜日」や「次の次の次の日曜日」などを取得できます。マイナスで数値を指定すれば「前の前の…」なども可能。
その他、複雑な指定
// 明日の2か月前の0時
echo date("Y-m-d H:i:s", strtotime("tomorrow -2 month midnight"));
// 2014年4月10日の2か月前の正午の30分前
echo date("Y-m-d H:i:s", strtotime("2014-04-10 +15 month noon -30 min"));
そして、いろいろ掛けあわせることで、複雑な日付を取得する事ができます。
例では「2014年4月10日の2か月前の正午の30分前」というのを取ってきてますが…まあこんなこともできるよ、ってことで。