もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

phpの日付系クラスのよく使うやつの比較表

はじめに

こんばんは。

1月は体調不良のツケでめっちゃ忙しく、2月は契約の切れ目で更に忙しく、ヘロヘロの僕です。

運悪く3〜4件くらいの案件がかぶってしまって、てんやわんやしております。

どれもPHP案件ですが、日付を扱うときに datetime だったり carbon だったり chronos だったりを使っていてこんがらがってきます。

carbonchronos はそんな変わんないんですけど、、、

というわけでよく使うやつを備忘録として少しだけまとめてました。

本題

format

DateTime Carbon Chronos
format('Y-m-d') format('Y-m-d') format('Y-m-d')

一月前

DateTime Carbon Chronos
subMonthNoOverflowByDateTime(自作関数) subMonthNoOverflow() subMonth()
 function subMonthNoOverflowByDateTime(\DateTimeImmutable $dateTimeImmutable) {
    $day        = (int)$dateTimeImmutable->format('j');
    $targetDate = $dateTimeImmutable->modify("-1 month");
    if ($day !== (int)$targetDate->format('j')) {
        $targetDate = $targetDate->modify('last day of last month');
    }
    return $targetDate;
}

一月後

DateTime Carbon Chronos
addMonthNoOverflowByDateTime(自作関数) addMonthNoOverflow() addMonth()
function addMonthNoOverflowByDateTime(\DateTimeImmutable $dateTimeImmutable) {
    $day        = (int)$dateTimeImmutable->format('j');
    $targetDate = $dateTimeImmutable->modify("+1 month");
    if ($day !== (int)$targetDate->format('j')) {
        $targetDate = $targetDate->modify('last day of last month');
    }
    return $targetDate;
}

先月頭

DateTime Carbon Chronos
modify('first day of last month') subMonthNoOverflow()->firstOfMonth() subMonth()->firstOfMonth()

来月頭

DateTime Carbon Chronos
modify('first day of next month') addMonthNoOverflow()->firstOfMonth() addMonth()->firstOfMonth()

先月末

DateTime Carbon Chronos
modify('last day of last month') subMonthNoOverflow()->lastOfMonth() subMonth()->lastOfMonth()

来月末

DateTime Carbon Chronos
modify('last day of next month') addMonthNoOverflow()->lastOfMonth() addMonth()->lastOfMonth()

同じかどうかの比較

DateTime Carbon Chronos
$date === $date eq() eq()

違うかどうかの比較

DateTime Carbon Chronos
$date !== $date ne() ne()

比較(>=)

DateTime Carbon Chronos
$date >= $date gte() gte()

比較(<=)

DateTime Carbon Chronos
$date <= $date lte() lte()

土日かどうか

DateTime Carbon Chronos
in_array((int)$dateByWeekEnd->format('w'), [0, 6], true) isWeekend() isWeekend()

終わりに

オーバーフローするかどうかで処理は変わりますが、今ん所オーバーフローする処理しか書いたことないのでこれで備忘録とっておきます。

来月も干からびるほどに忙しいけど、がんばります...