cakePHP4の日時についてFrozenTimeクラスの使い方を簡単に説明

概要

cakePHP4では日時についてFrozenTimeクラスを使います。
(※confi/app.phpで「defaultTimezone」を「Asia/Tokyo」にしておけば、そのタイムゾーンで動作します。)
しかしながらCookBookやAPIリファレンスを参照しても使い方がよくわからないので、自分がよく使うものだけでも簡単なメモを残そうと思います。

前提環境
  • cakePHP: 4.1.1

一応、該当のソースコードの場所について

簡単な説明だけでは不足だ!という方はソースコードを眺めてみてください。
場所がわかりにくく、かつ複数のファイルにまたがっているのでいくつか記載します。
(※下記以外にもあるので必要な方は探してみてくださいー。)

FrozenTimeクラス
/vendor/cakephp/cakephp/src/I18n/FrozenTime.php
親であるChronosクラス
/vendor/cakephp/chronos/src/
ChronosのTraitであるDifferenceTrait
/vendor/cakephp/chronos/src/Traits/DifferenceTrait.php

使い方

DBのdatetime型のカラムの取得と保存

/*
 * itemsテーブルのregistered_timeカラムがdatetime型の場合
 *

// 取得した「$item->registered_time」はFrozenTimeクラスのオブジェクトになっています。
$item = $this->Items->get($id);
echo $item->registered_time;

// 保存する場合はそのまま入れます。
// その1:現在時刻
$datetme = FrozenTime::now();
// その2:日時指定
$datetme = new FrozenTime('2000-01-10 00:00');

$item->registered_time = $datetme;

時間の加算について

// 分数の差分は「addMinutes」メソッドを使います。
// 第1引数はintで分を表します。

$expiration = $expiration->addMinutes(5);

// これ以外にも「add~」メソッドが同様に年、月、日の単位で加算を返します。

時間の減算(差分)について

// 秒数の差分は「diffInSeconds」メソッドを使います。
// 第1引数はFrozenTimeクラスのオブジェクトです。
// この場合は「$item->registered_time」-「$nowTime」になります。
// 第2引数は差分を絶対値とするかどうか。省略はtrueで絶対値扱いです。
// 下記の例ではfalseなので絶対値ではなく、正負の値になります。
$second = $nowTime->diffInSeconds($item->registered_time, false);

// これ以外にも「diffIn~」メソッドが同様に年、月、日の単位で差分を返します。

コメントする

CAPTCHA