CakePHPには標準でいろいろなライブラリが入っていますが、日付ではCake\I18n\Timeというライブラリが入っています。
内部では3.2より前のバージョンではCarbonだったようですが、それ以降のバージョンではChronosというライブラリが入っています。基本的にDateTimeとこのChronosでできるメソッドは実装されているようです。
以下のよく使用する使い方や注意点などを書いておきます。
通常のインスタンス作成
1 |
Time::now(); |
任意のフォーマットからのパース
1 2 |
Time::parse('2017/04/01'); ※yyyyMMddはだめでした。 |
任意のフォーマットへの出力
1 2 |
$time =Time::('2017/04/01'); $time->format('Ymd') #一般的な表記ではなくPHPの表記 |
年月日自分秒を指定してのインスタンス作成
1 |
$time = Time::create(2017, 12, 1, 0, 0, 0); |
任意の日付への変更
1 2 3 |
$targetMonth ='201704'; $time = Time::create(substr($targetMonth, 0, 4), substr($targetMonth, 4, 2), 1, 0, 0, 0); $secondDayObj = $time->day(5); //20170405 |
個別の値の取り出し
1 2 |
$now = Time::now(); echo $now->year; |
大小判定
1 2 |
#firstとsecondはともにTimeのオブジェクト $first->gt($second); |
区間判定
1 2 3 |
#全てTimeオブジェクト #境界値は含む(不等号でいうところのイコール) $targetDay->between($start, $end); |
加算・減算
1 2 3 4 |
$targetMonth ='201704'; $time = Time::create(substr($targetMonth, 0, 4), substr($targetMonth, 4, 2), 1, 0, 0, 0); $secondDayObj = $time->addDays(5); //20170406 |
月末日
1 2 3 4 |
$targetMonth ='201704'; $time = Time::create(substr($targetMonth, 0, 4), substr($targetMonth, 4, 2), 1, 0, 0, 0); $lastDayObj = $time->day($time->daysInMonth); //20170430 |
差分
1 2 3 4 |
$targetDayObj = Time::parse('2017-04-10'); $targetDayObj2 = Time::parse('2017-05-10'); $targetDayObj->diffInDays($targetDayObj2);//30日 |
注意点としてはTimeは変更があるたびに状態が変わってしまうので状態を変えたくないときはFrozenTimeというクラスをつかう必要があります。
例
1 2 3 4 5 6 7 |
$targetMonth = '201704' $time = Time::create(substr($targetMonth, 0, 4), substr($targetMonth, 4, 2), 1, 0, 0, 0); $secondDayObj = $time->day(20); $lastDayObj = $time->day($time->daysInMonth); $secondDayObj,$lastDayObjもともに2017/4/30になってしまう(※最後のtimeが最終日にアクセスをしているため) |
状態を変えたくないときはFrozenTimeを使います。
1 2 3 4 5 6 7 |
$targetMonth ='201704'; $time = FrozenTime::create(substr($targetMonth, 0, 4), substr($targetMonth, 4, 2), 1, 0, 0, 0); $secondDayObj = $time->day(20); $lastDayObj = $time->day($time->daysInMonth); $secondDayObjは2017/4/20のままです。※$time自体が2017/04/01のままなので |
参考リンク
https://book.cakephp.org/3.0/ja/core-libraries/time.html
https://book.cakephp.org/3.0/ja/chronos.html
CakePHP3のChronosの機能紹介
[…] CakePHP3 日付ライブラリ(Time)について http://skill-up-engineering.com/?p=2758 […]