我正在开发一个新的 Laravel 7.1 应用程序(不是升级)但似乎使用日期序列化会松散时区。
配置/app.php
'timezone' => 'Europe/Zurich',
修补例子
>>> \Carbon\Carbon::parse('2020-06-22')->timezone
=> Carbon\CarbonTimeZone {#3251
timezone: Europe/Zurich (+01:00),
}
>>> \Carbon\Carbon::parse('2020-06-22')->toJson()
=> "2020-06-21T22:00:00.000000Z"
所以,当我解析日期时,我没有得到正确的日期。
>>> new \Carbon\Carbon('2020-06-21T22:00:00.000000Z')
=> Carbon\Carbon @1592776800 {#3266
date: 2020-06-21 22:00:00.0 +00:00,
timezone: "Z",
}
>>> (new \Carbon\Carbon('2020-06-21T22:00:00.000000Z'))->format('Y-m-d')
=> "2020-06-21"
目前我正在这样做
$date = Carbon::parse('2020-06-21T22:00:00.000000Z')
->setTimezone(config('app.timezone'));
作为替代方案,我可以更改模型中的默认日期格式,如文档中所述
/**
* Prepare a date for array / JSON serialization.
*
* @param \DateTimeInterface $date
* @return string
*/
protected function serializeDate(DateTimeInterface $date)
{
return $date->toIso8601String(); // 2019-02-01T03:45:27+00:00
}
但我猜最好Carbon::parse()
和/或new Carbon()
默认使用我的时区。-