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

Carbon::parse真是坑爹

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

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

改动

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

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 16

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

1个月前 评论

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

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

我看了下 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 设置了默认时区。

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

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

1个月前 评论

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

1个月前 评论

date_default_timezone_set 还是UTC吗

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

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

1个月前 评论
轻描淡写 1个月前
wlfpanda1012 (作者) 3周前

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

1个月前 评论

为 Carbon 加个 inAppTimezone 宏方法:

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

boot 一下这段代码

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

解析时间戳要用 createFromTimestamp

1个月前 评论

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