gpt4 book ai didi

Javascript DateTime 与 MySQL 日期和时区

转载 作者:行者123 更新时间:2023-11-29 11:47:12 24 4
gpt4 key购买 nike

我有一个使用 Angular + Angular-Bootstrap 版本的 Web/PhoneGap 应用程序(分别为 1.2.x 和 0.10.0)。

在客户端,我有一个日期选择器(datepicker-popup)。

在服务器端,我有 sails.js,它可以与 MySQL 数据库配合使用。

我的模型(服务器端)有一个日期字段(MyModel.js):

   module.exports = {
schema: true,
attributes: {
date: {
type: 'date',
required: true
},
...
}
}

现在我遇到以下问题:

在客户端上我选择一个日期。我得到了一个js数据。我的时区是 +2,所以如果我在 UI 中选择 2016-01-12,我会得到 '2016-01-11T22:00:00Z' (时间相同,但采用 UTC)。

现在它被发送到服务器并存储在数据库中。

在本地工作时,我看到“2016-01-12”保存在数据库的date 列中。当我使用远程服务器时,保存的日期是“2016-01-11”(服务器位于欧盟西部的 AWS - 我相信是爱尔兰)。

当我再次在客户端中检索该日期时,我得到了错误的日期 ('2016-01-11T00:00:00Z')。

我相信这与服务器的时区和被 chop 的数据有关 - 它不保存完整的 UTC 日期+时间,而是仅保存日期,当在客户端检索和解析时,我得到“2016” -01-11T00:00:00Z' == '2016-01-11T02:00:00+2:00') 这是错误的日期:/

除了将架构/模型更改为完整日期时间(我假设保留完整日期并在客户端检索时正确解析)之外,我不确定还有什么其他选择。

还有其他解决办法吗?

编辑:

正如我在下面写的那样进行转换:

var dd = moment.utc(moment(d).format("YYYY-MM-DDTHH:mm:ss")).toDate()

获取本地时间,但为 UTC。 (我认为对于 UTC 之前的时区(例如 +2),这种“解决”问题。不确定其他方式)

例如,它将转换 '2016-01-12T00:00:00+2:00' (== '2016-01-11T22:00:00Z') 到 '2016-01-12T00:00:00Z' 但这是一种黑客行为,并不适用于所有情况。

最佳答案

您的模型应使用datetime类型而不仅仅是date,并且您应始终以UTC存储,客户端应负责在用户的时区中显示它。

module.exports = {
schema: true,
attributes: {
date: {
type: 'datetime',
required: true
}
}
}

关于Javascript DateTime 与 MySQL 日期和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725897/

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