🚀

PHP Carbonで日付操作

2023/07/12に公開

日本の現在の日時を取得(TimeZomeがUTCになっているので注意)

$now = new Carbon(null, 'Asia/Tokyo');
$nowDateTimeString =$now->toDateTimeString();
var_dump($nowDateTimeString); // "2023-07-10 17:44:22"

Laravelでnew Carbon()で時間を日本時間にする場合、以下の設定が必要

config/app.php

// 'timezone' => 'UTC',
'timezone' => 'Asia/Tokyo',
$now = new Carbon();
$nowDateTimeString =$now->toDateTimeString();
var_dump($nowDateTimeString); // "2023-07-10 17:44:22"

Carbonで時間をずらすと、元のインスタンスも影響する(mutable)

$now = Carbon::now();
$anhhurLater = $now->addHour();
dump($now->toDateTImeString());// "2023-07-12 08:20:33"
dd($anhhurLater->toDateTimeString());// "2023-07-12 08:20:33"

formatの色々なパターン(DateTimeクラスと同じformatの引数)

$now = Carbon::now();
$now->format('Y/m/d');// "2023/07/12" 
$now->format('H:i');// "07:25
$now->format('H:i:s');// "07:26:30"
$now->format('H:i:s.u');// "07:27:05.813475"
$now->format('w');// 曜日:0 (日曜)から 6 (土曜)
$now->format('l jS \o\f F Y h:i:s A');// "Wednesday 12th of July 2023 07:33:10 AM"
$now->format('Y/m/d D h:i:s A');// "2023/07/12 Wed 07:36:00 AM"

CarbonにGetterメソッドがある・。例えば、年だけとか、月だけとか比較するのに使いたい時に使える

$dt = Carbon::parse('2012-10-5 23:26:11.123789');

// These getters specifically return integers, ie intval()
var_dump($dt->year);                                         // int(2012)
var_dump($dt->month);                                        // int(10)
var_dump($dt->day);                                          // int(5)
var_dump($dt->hour);                                         // int(23)
var_dump($dt->minute);                                       // int(26)
var_dump($dt->second);                                       // int(11)
var_dump($dt->micro);                                        // int(123789)
// dayOfWeek returns a number between 0 (sunday) and 6 (saturday)
var_dump($dt->dayOfWeek);                                    // int(5)
// dayOfWeekIso returns a number between 1 (monday) and 7 (sunday)
var_dump($dt->dayOfWeekIso);                                 // int(5)
var_dump($dt->englishDayOfWeek);                             // string(6) "Friday"
var_dump($dt->shortEnglishDayOfWeek);                        // string(3) "Fri"
var_dump($dt->locale('ja')->dayName);                        // string(7) "金曜日"
var_dump($dt->locale('ja')->shortDayName);                   // string(3) "金"
var_dump($dt->locale('ja')->minDayName);                     // string(2) "金"
var_dump($dt->englishMonth);                                 // string(7) "October"
var_dump($dt->shortEnglishMonth);                            // string(3) "Oct"
var_dump($dt->locale('ja')->monthName);                      // string(7) ""10月"
var_dump($dt->locale('ja')->shortMonthName);                 // string(3) "10月"

日時1 === 日時2

// マイクロ秒まで全く同じ
$dt1 = new Carbon('2012-10-5 23:26:11.123789');
$dt2 = new Carbon('2012-10-5 23:26:11.123789');
$bool = $dt1->eq($dt2);
var_dump($bool);// true

// 秒まで同じで比較
$dt1 = new Carbon('2012-10-5 23:26:11');
$dt2 = new Carbon('2012-10-5 23:26:11');
$bool = $dt1->eq($dt2);
var_dump($bool);// true

// マイクロ秒が違う
$dt1 = new Carbon('2012-10-5 23:26:11.123789');
$dt2 = new Carbon('2012-10-5 23:26:11.000000');
$bool = $dt1->eq($dt2);

var_dump($bool);// false

日時1 > 日時2かどうか

$dt1 = new Carbon('2012-10-5 23:26:12');
$dt2 = new Carbon('2012-10-5 23:26:11');
$bool = $dt1->gt($dt2);

var_dump($bool);// true

日時1 >= 日時2かどうか(gtd = greater equal)

$dt1 = new Carbon('2012-10-5 23:26:12');
$dt2 = new Carbon('2012-10-5 23:26:12');
$bool = $dt1->gte($dt2);
var_dump($bool);// true

$dt1 = new Carbon('2012-10-5 23:26:13');
$dt2 = new Carbon('2012-10-5 23:26:12');
$bool = $dt1->gte($dt2);
var_dump($bool);// true

日時1 < 日時2

$dt1 = new Carbon('2012-10-5 23:26:11');
$dt2 = new Carbon('2012-10-5 23:26:12');
$bool = $dt1->lt($dt2);
var_dump($bool);// true

日時1 <= 日時2

$dt1 = new Carbon('2012-10-5 23:26:11');
$dt2 = new Carbon('2012-10-5 23:26:12');
$bool = $dt1->lt($dt2);
var_dump($bool);// true


$dt1 = new Carbon('2012-10-5 23:26:12');
$dt2 = new Carbon('2012-10-5 23:26:12');
$bool = $dt1->lte($dt2);
var_dump($bool);// true

日時1 <= 日時2 <= 日時3

$dt1 = new Carbon('2012-10-5 23:26:11');
$dt2 = new Carbon('2012-10-5 23:26:12');
$dt3 = new Carbon('2012-10-5 23:26:13');
$bool = $dt2->between($dt1, $dt3);
var_dump($bool);// true

Discussion