我在我的模型中使用 laravel 转换来转换我的时间戳到日期:Y/n/j。但是 Laravel 将其转换为错误的日期。
模型:
class Diary {
protected $casts = [
'created_at' => 'date:Y/n/j',
];
应用程序.php:
'timezone' => 'Asia/Tokyo',
php.ini:
date.timezone = "Asia/Tokyo"
mysql:
select * from diaries;
+----+-------+---------------------+
| id | diary | created_at |
+----+-------+---------------------+
| 1 | 愛 | 2021-06-08 01:00:01 |
+----+-------+---------------------+
1 row in set (0.02 sec)
铸造后的输出:
$firstDiary= Diary::first();
$firstDiary->toJson();
...
// It must be 2021/6/8
'created_at' => 2021/6/7
我已经做了:
php工匠配置:缓存
date_default_timezone_set('亚洲/东京');
如果我将 created_at 从“2021-06-08 01:00:01”更改为大于“2021-06-08 8:59:59”的内容,它会正确显示。我正在使用 laravel 8、mysql 8 和 php 8。所以这可能不是我的问题。有任何想法吗?
从 Laravel 7.0 开始,在调用toJson
框架时在toJson
后台使用 Carbon 的方法,该方法生成始终以 UTC 表示的 ISO-8601 兼容日期。因此,我猜您的时区在日期转换为您所需的格式之前已转换为 UTC,因此正在发生这样的事情:
\Carbon\Carbon::parse('2021-06-08 01:00:01', 'Asia/Tokyo')->timezone('UTC')->format('Y/n/j'); // 2021/6/7
\Carbon\Carbon::parse('2021-06-08 08:59:59', 'Asia/Tokyo')->timezone('UTC')->format('Y/n/j'); // 2021/6/7
\Carbon\Carbon::parse('2021-06-08 09:00:00', 'Asia/Tokyo')->timezone('UTC')->format('Y/n/j'); // 2021/6/8
我建议您继续以 UTC 格式存储和返回所有内容,并在最后可能的时刻转换为所需的时区,以保持一切可管理。虽然,如果您坚持将所有内容存储在Asia\Tokyo
同一时区并在同一时区返回并且不进行任何转换,那么serilizeDate
您的模型的覆盖函数应该可以按照早期升级指南中的描述来实现:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句