何
- timezone情報のついた日時文字列表現(ISO8601という?)をCarbonで取り扱う際のメモ
追記
挙動
test.php
public function test_timezone()
{
//日本時間で初期化
$tokyo = '2017-05-15T04:20:00+09:00';
$c_tokyo = new \Carbon\Carbon($tokyo);
$this->assertEquals('2017-05-15 04:20:00', $c_tokyo->format('Y-m-d H:i:s'));
$this->assertEquals('2017-05-15T04:20:00+0900', $c_tokyo->format(DateTime::ISO8601));
$this->assertEquals('+09:00', $c_tokyo->tzName);
//UTC時間で初期化
$utc = '2017-05-15T04:20:00Z';
$c_utc = new \Carbon\Carbon($utc);
$this->assertEquals('2017-05-15 04:20:00', $c_utc->format('Y-m-d H:i:s'));
$this->assertEquals('2017-05-15T04:20:00+0000', $c_utc->format(DateTime::ISO8601));
$this->assertEquals('2017-05-15T04:20:00Z', $c_utc->format('Y-m-d\TH:i:s\Z')); //Zの表現にしたいとき
$this->assertEquals('Z', $c_utc->tzName);
//日本時間からUTCに変換
$c_tokyo2 = $c_tokyo->copy()->setTimezone('UTC');
$this->assertEquals('2017-05-14 19:20:00', $c_tokyo2->format('Y-m-d H:i:s'));
$this->assertEquals('2017-05-14T19:20:00+0000', $c_tokyo2->format(DateTime::ISO8601));
$this->assertEquals('UTC', $c_tokyo2->tzName);
//表現は変わるが時間差はない
$this->assertEquals(0, $c_tokyo->diffInSeconds($c_tokyo2));
}
その他
- Carbonの、というよりはCarbonがラップしているDateTimeの、なのでしょう。