我的用户可以创建一些具有特定时间的对象,并通过查询特定的startTime和endTime来搜索它们。
我的问题是如何将这些对象存储在我的数据库(MongoDB)中?我应该将它们存储在UTC中还是与创建对象的用户相关的特定时区存储?
答案 0 :(得分:8)
使用UTC日期格式,并将所有数据转换为UTC:创建,更新,删除对象或过滤它们时。使用一个UTC时区可以帮助您避免许多问题,并简化您的代码。
> var now = new Date();
> Mon May 26 2014 10:55:34 GMT+0300 (Kaliningrad Standard Time)
> now.toUTCString();
> Mon, 26 May 2014 07:55:34 GMT
> new Date(now.toUTCString())
> Mon May 26 2014 10:55:34 GMT+0300 (Kaliningrad Standard Time)
答案 1 :(得分:0)
当您创建新的Javascript日期对象并将其分配给Mongo日期字段时,它将自动适用于任何时区。如果您只需要当前时间,则可以使用new Date()
。但是,如果你需要一个字符串并让它在特定时区进行解释,或者你要在特定时区向用户展示时间,我强烈建议你查看Moment Timezone。
此代码将采用存储在Mongo模型中的日期对象(可能是2014年1月1日凌晨1点在澳大利亚悉尼),并将其格式化为洛杉矶时区(仍将是2013年12月31日)。
collection.find({_id: 123}, function(err, model) {
userDate = moment(model.date).tz("America/Los_Angeles").format("MM/DD/YYYY");
});
如果你需要解析一个没有指定UTC偏移量作为特定时区的字符串,你可以使用构造函数:
moment.tz("2013-11-18 11:55", "America/Toronto")