情况如下:
我occurred_at
在我的数据库中以 UTC 存储日期。我正在使用 laravel 编写一个返回包含这些occurred_at
字段的记录的 API 方法。它们目前通过 JSON 以字符串格式返回(PHP Carbon 库输出的内容),例如:
"occurred_at":"2015-04-14 00:25:20"
该日期“发生”于 UTC 时区的00:25
( 12:25 AM
),但实际上发生在太平洋2015-04-13 17:25
( 5:25 PM
PST) 时区的 ( )。
我正在使用 angular 来使用 JSON,并认为我会使用 angular-moment 库将 UTC 转换为本地。但它不起作用。角矩和原生角度过滤器都输出相同的东西:
<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。在我的角度应用程序代码中,我什至设置了 UTC 预处理器以将它们读取为 UTC,但它们不显示为当地时间:
.constant('angularMomentConfig', {
preprocess: 'utc'
})
必须有一种标准的方法来解决这个问题 - 在数据库中以 UTC 存储日期时间值,但将它们显示为本地时间给用户。我需要在服务器端进行一些更改吗?客户端?使用“它只是工作”方法的最佳实践是什么,而不为我要显示的每个日期编写大量代码?
目前,在非角度项目中,我通过将 css 类应用于我想将时间转换为本地时间的每个跨度来使用我认为是“黑客”的东西:
$('.utc-dttm').each(function () {
var t = moment.utc($(this).text()).local();
$(this).text(t.format("L") + ' ' + t.format("LT"));
});
但我认为这是错误的做法。