Carbon::parse真是坑,直接用UTC。

Carbon::parse真是坑爹

laravel 已经设置默认时区:Asia/Shanghai,结果 parse 不用:sweat_smile:

那么这个 “默认”,还能是默认吗?
不打印,一直以为配置没生效。

改动

如果是数字,Carbon 直接用createFromTimestampUTC
改成createFromTimestamp就正常了。(不现实,代码在vendor)。
Carbon::parse真是坑爹,直接用UTC。

nesbot/carbon 好像不能全局设置时区,那么是laravel 坑?

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 17

解析没有时区的时间需要自定义时区。解析好像没有用默认时区的说法,默认时区该说是用在获取now的时候的

6个月前 评论

如楼上所说,Unix 时间戳只是个数字,代表 1970-1-1 至今过去了多少秒,不受时区影响。

6个月前 评论
lyxxxh (楼主) 6个月前

我看了下 Carbon 的文档,这应该是 Carbon 3 的行为,之前的 Carbon 2 应该是会继承的。

You can create instances from unix timestamps. createFromTimestamp() create a Carbon instance equal to the given timestamp and will set the timezone to the given timezone as second parameter, or to UTC if non given (since Carbon 3) (in previous versions it defaulted to date_default_timezone_get()).

carbon.nesbot.com/docs/#api-timezo...

而 Laravel 应该是用 date_default_timezone_get 设置了默认时区。

6个月前 评论
lyxxxh (楼主) 6个月前

去年踩过这个坑, laravel的这个Facade有点问题, 保险起见我直接手动 Carbon::createFromTimestamp($time, Config::get('app.timezone'))

6个月前 评论

保险起见后端全用utc时区,返回给前端,前端根据设备的地区设置显示对应时区的时间

6个月前 评论

date_default_timezone_set 还是UTC吗

6个月前 评论
lyxxxh (楼主) 6个月前

就我从阿里云的一些返回数据上来看,他们都是直接返回时间戳的,具体显示什么时间是前端来做设置。

6个月前 评论
轻描淡写 6个月前
wlfpanda1012 (作者) 6个月前

通用做法不是后端都是utc然后前端来显示相应的时间吗 :joy:

6个月前 评论

为 Carbon 加个 inAppTimezone 宏方法:

$carbon->inAppTimezone()->其他方法(...);
6个月前 评论

boot 一下这段代码

\Illuminate\Support\DateFactory::useCallable(
    static fn (mixed $result): mixed => $result instanceof \DateTime || $result instanceof \DateTimeImmutable
        ? $result->setTimezone(config('app.timezone'))
        : $result
);
6个月前 评论

解析时间戳要用 createFromTimestamp

6个月前 评论

大坑!!! Carbon 升级文档有说这个事, 反正用 parse() 方法传递时间戳来初始化的时候是用的 UTC 时区的, 即使传递了第二个参数也无效. createFromTimestamp() 方法第二个参数有效.

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
89
粉丝
108
喜欢
481
收藏
724
排名:108
访问:8.8 万
私信
所有博文
社区赞助商