「1日前の日付を取得したい」「1ヶ月前の日付を取得したい」といったように、システムを開発する上で日付の処理はよく使うと思います。そこで、今回は指定した日時からDateTimeクラスを利用して1日前や1週間前の日時を出力する方法を記載します。phpでstrtotimeを使うことで算出できますが、2038年問題で使えなくなってしまうので、注意しましょう。
目次
DateTimeを使う
基本的な書き方
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');
DateTimeの引数を空で指定すると、現在の日時を取得できます。
そして、出力フォーマットを指定することで指定したかたちで書き出すことができます。
また、DateTimeの引数を指定することで、指定した日時を起点に計算させることもできます。
また日付文字列を引数に指定する事も出来ます。
$date = new DateTime('2020-12-10 01:00:00');
echo $date->format('Y-m-d H:i:s');
今回は、X日前を取得したいため、modifyという書き方で取得したい日付を記載します。
指定した日時から、DateTimeを使って、X時間前、X日前、X週間前、Xヶ月前を取得する
指定した日時から1時間前を取得
$date = new DateTime('2020-12-10 01:00:00');
echo $date->modify('-1 hour')->format('Y-m-d H:i:s');
-2020-12-10 00:00:00
指定した日時から1日前
$date = new DateTime('2020-12-10 01:00:00');
echo $date->modify('-1 day')->format('Y-m-d H:i:s');
-2020-12-09 01:00:00
指定した日時から1週間前
$date = new DateTime('2020-12-10 01:00:00');
echo $date->modify('-1 week')->format('Y-m-d H:i:s');
-2020-12-03 01:00:00
指定した日時から1ヶ月前
$date = new DateTime('2020-12-10 01:00:00');
echo $date->modify('-1 month')->format('Y-m-d H:i:s');
-2020-11-10 01:00:00
現在の日時から、DateTimeを使って、X時間前、X日前、X週間前、Xヶ月前を取得する
現在日時から1時間前
$date = new DateTime();
echo $date->modify('-1 hour')->format('Y-m-d H:i:s');
現在日時から1日前
$date = new DateTime();
echo $date->modify('-1 month')->format('Y-m-d H:i:s');
現在日時から1週間前
$date = new DateTime();
echo $date->modify('-1 week')->format('Y-m-d H:i:s');
現在日時から1ヶ月前
$date = new DateTime();
echo $date->modify('-1 month')->format('Y-m-d H:i:s');
まとめ
DateTimeクラスを利用して、1日前や1週間前の日時を出力する。php5.2以上の場合は、推奨されているため、DateTimeクラスを使った方がいいです。php5.2未満の場合は、strtotimeを使うことで算出できますが、2038年問題で使えなくなってしまうので、注意しましょう。
2038年問題とは、日付をフォーマットする時に、2038年を過ぎた2039年で実行すると、過去日付になってしまう問題です。詳しくは、”2038年問題 php” とかで調べると文献が出てきますので、興味ある方は調べてみてください。