phpで日付,時間を使ったので忘れないようにメモ
##概要
phpを日付を使用する際には,DateTimeとDateTimeImmutableオブジェクトがある.
基本的には同様の振る舞いをするが,加算/減算する際には振る舞いが異なる.
- DateTime:オブジェクトそのものを変更する
- DateTimeImmutable:変更したオブジェクトを返す
- 今の年月日取得
- 日付型の演算(2種類)
- 日付型から一部のみ取得(年など)(文字列を日付に変換)
1.日付型の取得
DateTimeオブジェクトの作成.引数を入れなければ現在に時刻から作成
$date_obj = new Date()
//DateTime Object
//(
// [date] => 2021-02-03 13:20:16.977190
// [timezone_type] => 3
// [timezone] => UTC
//)
$date_obj2 = new DateTime('2020-01-01');
(
[date] => 2020-01-01 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
2-1. 日付型の演算
modifyを噛ませる.(オブジェクトの中身が上書きされることに注意)
$date_obj->modify('+1 years'); // 2022-02-03
$date_obj->modify('+1 months'); // 2022-03-03
$date_obj->modify('+1 days'); // 2022-03-04
2-2. 日付型の演算
DateTimeImmutableオブジェクトの場合はDateInterval(),add(),sub()を使用する.(返り値がある)
日付同士の差については,DateTimeInterface::diff() を使用するが省略.
$date_obj = new DateTimeImmutable('2020-01-01');
// 加算,減算する間隔を定義
// P:Period, Y:year, M:month, D:day
$interval1 = new DateInterval('P1Y'); //1年
$interval2 = new DateInterval('P1M'); //1ヶ月
$interval3 = new DateInterval('P1D'); //1日
//加算add(),減算sub()を使用
$next_year = $date_obj->add($interval1); //2021-01-01
$before_month = $date_obj->sub($interval2); //2019-12-01
日付型から一部のみ取得(年など)
$date_obj->format('Y') //2022
$date_obj->format('M') //Mar
$date_obj->format('m') //03
$date_obj->format('d') //02
$date_obj->format('D') //Fri
UNIXタイムスタンプの取得
UNIXタイムスタンプは,1970年1月1日午前0時0分0秒から形式的な経過秒数
$date_obj2->getTimestamp() //1577887268
参考
https://www.php.net/manual/ja/class.datetime.php
https://www.php.net/manual/ja/datetimeimmutable.add.php
https://www.php.net/manual/ja/class.dateinterval.php