你们在Api开发中是怎么运用日期时间字段的,现在最新版的时间改成默认UTC了

方法一

我知道有人会说
protected $casts = [
‘published_at’ => ‘datetime:Y-m-d H: i:s’
];
但是这样会有一个问题就是,这样虽然解决了,但是就失去了多时区的特性了

方法二

如果还是保留原本的UTC时间输出,这样不同地区可以格式化成不同的时区显示
但是这样也有一个问题
Laravel默认竟然没有一个简单的办法把UTC时间转换成Laravel config/app中配置的时区入库
也就是说我需要自己
Carbon::parse($data[‘published_at’])->timezone(‘Asia/Shanghai’)
每一个需要日期的地方去这样去做一下,很麻烦,你们有啥好办法解决统一的$request数据处理

方法三

保留默认的UTC时间Api输出,同时把App中的时区改成UTC,这样就不用单独处理时间格式转换,但是这样有一个问题就是,数据库里面的日期保存的全是UTC时间了这个缺点了(数据库要不要配置一下?)

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 9

用 pgsql 的 datetimeTz 方法

2个月前 评论

这个功能Mysql不支持是吗,我有试了一下,好像也是没用,我一直在怀疑是自己用错了

2个月前 评论

config/app.php 中有个配置项,叫做 timezone。我一般都会改成 Asia/Shanghai

你是不是这个没改过。

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
    */

    'timezone' => 'Asia/Shanghai',
2个月前 评论
深蓝色 (楼主) 2个月前

api接口当然是返回时间戳了,app自己转换

2个月前 评论

你的问题根本就不是技术问题,建议你自己封装方法,或者封装个laravel包。

2个月前 评论

看你说的,猜测你应该是要根据请求中的参数判断该用哪个时区。可以在中间件中处理一下,设置全局的时区

config()->set('app.timezone', 'Asia/Shanghai');

像这样,根据请求的参数,动态修改时区

2个月前 评论
yybawang

文档有说明

看我标黄的一句,我当时第一次做多海外项目的时候,我也很纠结多国家时区到底如何互相转换才能显示正确呢。原来我们只要做到所有的都是UTC就可以了,mysql utc(保持默认),php utc(保持默认),我们只返回 2024-01-31T15:17:11.000000Z 这种格式就可以了,又显示端自行用设备的时区处理成设备的时区时间格式,js 使用浏览器的时区,app 使用手机时区,包括其它设备。你做国内项目也是一样的道理后端从不管时区,后段只有UTC一个时区,只在前端处理时区问题

总结

就是PHP默认为UTC,mysql 也为默认UTC,PHP永远返回TZ形式: 2024-01-31T15:17:11.000000Z,只在显示端处理时区,设备是什么时区自然会转换为设备时区。反理如果需要前端传日期,也是需要传入 2024-01-31T15:17:11.000Z 这种格式,js 可以使用 new Date().toISOString()

2个月前 评论
深蓝色 (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!