首页 文章

在MongoDB中存储日期和时区

提问于
浏览
10

我只想得到专家的确认 . 我仍然对我认为在这样的环境中存储和处理日期的正确方法感到自信 .

我正在为意大利用户开发一个小应用程序 .

基本上,他们可以创建一个条目列表,每个条目都有 creationDate (我只对日期部分感兴趣,时间在我的场景中没用) .

因此,用户在“日期”表单字段中输入以下格式的日期:2014年6月22日代表2014年6月的第22天 . 然后,日期被解析为:

entryData.dateEntry = moment( $(form).find('input[name=dateEntry]').val(), 'DD-MM-YYYY' ).toDate();

最后,我的入门模型被添加到backbone.js集合中,并由MongoDB中的Node.js Express添加到服务器端 .

查询Mongo的条目,我看到:

2014-06-21 22:00:00 +0000

对应于“dateEntry”:日期(1403388000000) .

谷歌搜索,我发现MongoDB没有时区的概念 . 所有日期都以UTC格式存储,而我之前创建的日期对象格林威治标准时间2.但我真的很害怕...我怎么能以简单的方式取回当地时区的日期?

接下来,我将在下划线模板中显示条目数据,这样:

<%= moment(dateEntry).format('DD/MM/YYYY') %>

而且......瞧!我得到了当地的'意大利'日期:22/06/2014 .

现在,我的问题: is that the right way to go?

过程是:在本地时区解析日期=>存储在utc =>以本地时区检索日期 . Is it a common practice?

我还想:我不能简单地避免使用时区和存储我的本地(意大利)时间,因为它是时间(2014-06-22 00:00:00)? Is that so bad?

1 回答

  • 4

    是的,通常的做法是将所有时间戳存储在UTC中,然后将其转换为外层中的特定时区 . 许多框架会自动为您执行此操作,包括Rails . 让我们说如果你今后开始迎合其他时区,你将不会遇到任何问题,因为你的数据库有UTC条目 . 您将节省时区转换的开销 .

    如果你只想保存日期,你也可以这样做,但我没有看到你当前的方式有任何损害 - 保存所有的UTC . 我不确定node.js但是会有一些设置你可以指定时区(意大利),你的所有转换都会自动发生 . 您可能会发现此主题非常有用:

    How can I set the default timezone in node.js?

相关问题