後輩に聞かれたので、私と彼のための覚え書きのメモとして。
PHPには、日付と時刻を扱う DateTimeクラスがありますが、こちらを用いて、現在の日時から○日後や、○時間前の日付・時刻を取得する方法です。
DateTimeクラスについて、PHPのマニュアルはこちらから。
DateTime クラス – Manual
http://php.net/manual/ja/class.datetime.php
○日後を扱う前に、まず現在の日時を取得する方法は下記の通り。
// 現在の日時を取得 $now = new DateTime(); echo $now->format('Y-m-d H:i:s'); // 2017-12-05 19:05:00
DateTimeの引数を空で指定すると、現在の日時を取得できます。
それを任意のフォーマットに変換しています。
また日付文字列を引数に指定する事も出来ます。
// 日付文字列で指定した日時を取得 $date = new DateTime("2017-06-01 06:00:00"); echo $date->format('Y-m-d H:i:s'); // 2017-06-01 06:00:00
日付文字列で指定した日時を取得できます。
で、本題はここから。
○日後という相対的な日時を取得したい場合、modify というものを使うことにより、DateTimeで取得した日付を変更できます。
// 現在の日時の1日後の日時を取得 $date = new DateTime(); $date->modify('+1 day'); echo $date->format('Y-m-d H:i:s'); // 現在の日時の1日後の日付
または、この書き方でもOK。
// 日付文字列で指定した日時の1日後の日時を取得 $date = new DateTime("2017-06-01 06:00:00 + 1 day"); echo $date->format('Y-m-d H:i:s'); // 2017-07-01 06:00:00
上記はGoogle Chromeでしか動作検証していませんが、1日後の日付が正しく取得できました。
それ以外にも、「– 1 day」と書けば1日前、「+ 3 hour」と書けば3時間後、「+ 1 week」と書けば1週間後の日時がそれぞれ取得できます。
日付の変更は、使用頻度はそこまで高くはないのですが、ふとした拍子に使ったりするので、頭の片隅ででも覚えて置きたいですね。
また、今回 DateTimeクラスを調べていて知ったのですが、数値を指定して日時を取得することもできるとのこと。
このやり方については私はまだ実際に使ったことありません。
// 数値を指定して日時を取得 $date = new DateTime(); $date->setDate(2017,6,1); $date->setTime(6,0,0); echo $date->format('Y-m-d H:i:s'); // 2017-06-01 06:00:00
セレクトボックスから年・月・日をそれぞれ選んで、それらを日付に変換するときとかに使えそうですね。
が、今回はDatepickerを使っているので、使うことはなさそうです。