我有一个web / phonegap应用程序,它使用angular + angular-bootstrap版本(分别为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所以如果我在用户界面中选择2016-01-12,我会得到'2016-01-11T22:00:00Z'
(这是同一时间,但是在UTC中)。
现在将其发送到服务器并存储在数据库中。
在本地工作时我看到2016-01-12'保存在数据库的date
列中。当我使用远程服务器时,保存的日期是' 2016-01-11' (服务器在欧盟 - 西部的AWS中 - 我相信爱尔兰)。
当我再次在客户端中检索该日期时,我的日期错误('2016-01-11T00:00:00Z'
)。
我认为这与服务器的时区和数据被截断有关 - 而不是保存完整的UTC日期+时间,它只保存日期,当检索到并在客户端解析时我得到&# 39; 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'
,但这是一种在任何情况下都无法工作的黑客。
答案 0 :(得分:1)
您的模型应该使用datetime
类型而不仅仅是date
,并且您应该始终以UTC格式存储,客户端应该注意在用户的时区中显示它。
module.exports = {
schema: true,
attributes: {
date: {
type: 'datetime',
required: true
}
}
}