gpt4 book ai didi

javascript - 处理 UTC 日期客户端

转载 作者:行者123 更新时间:2023-12-03 10:21:18 24 4
gpt4 key购买 nike

情况如下:

我有occurred_at以 UTC 格式存储在我的数据库中的日期。我正在使用 laravel 编写一个 API 方法,该方法返回包含这些 occurred_at 的记录。字段。它们目前通过 JSON 以字符串格式返回(PHP Carbon 库输出的内容),例如:

"occurred_at":"2015-04-14 00:25:20"
该日期“发生”于00:25 ( 12:25 AM ) 在 UTC 时区,但实际上在 2015-04-13 17:25 ( 5:25 PM ) 太平洋 (PST) 时区。

我正在使用 Angular 来使用 JSON,并认为我会使用 Angular-Moment 库将 UTC 转换为本地时间。但这不起作用。 Angular 矩和 native Angular 过滤器输出相同的内容:

<span>{{evt.occurred_at | amDateFormat:'L LT'}}</span>
<span>{{evt.occurred_at | date:'MM/dd/yyyy @ h:mma'}}</span>

输出:

2015-04-14 00:25:20

仍为 UTC。在我的 Angular 应用程序代码中,我什至有 UTC 预处理器设置来将它们读取为 UTC,但它们不会显示为本地时间:

.constant('angularMomentConfig', {
preprocess: 'utc'
})

必须有一个标准方法来解决这个问题 - 将 UTC 格式的日期时间值存储在数据库中,但将它们显示为本地时间给用户。我需要在服务器端进行一些更改吗?客户端?使用“它就是有效”方法的最佳实践是什么,而无需为我想要显示的每个日期编写大量代码?

目前,在非 Angular 项目中,我正在使用我认为是“黑客”的方法,将 css 类应用到我想要将时间转换为本地时间的每个范围:

$('.utc-dttm').each(function () {
var t = moment.utc($(this).text()).local();
$(this).text(t.format("L") + ' ' + t.format("LT"));
});

但我认为这是错误的处理方式。

最佳答案

由于有效的 JSON 日期时间字符串的格式为 ISO-8601 格式,因此您应该让 Carbon 将日期值转换为此格式,然后再通过 toIso8601String 将其返回给客户端,例如:

$occurred_at->toIso8601String();

这会将日期字符串输出为

2015-04-14T00:25:20Z

哪些 JavaScript 和任何日期扩展库应 native 解析为 UTC 时区,并在输出给用户时调整为客户端时区。

关于javascript - 处理 UTC 日期客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29617688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com