如何在nodejs中的服务器端存储日期时间?

时间:2014-05-26 07:50:01

标签: node.js mongodb datetime express mongoose

我的用户可以创建一些具有特定时间的对象,并通过查询特定的startTime和endTime来搜索它们。

我的问题是如何将这些对象存储在我的数据库(MongoDB)中?我应该将它们存储在UTC中还是与创建对象的用户相关的特定时区存储?

2 个答案:

答案 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")