在MongoDB中存储date和时区
我只想要专家的确认。 对于我认为是在这样的环境中存储和处理date的正确方式,我仍然没有信心。
我正在开发一个小应用程序, 只为意大利用户 。
基本上,他们可以创build一个条目列表,每个条目都有一个creationDate (我只对date部分感兴趣,时间在我的场景中没有用处)。
因此,用户在“date”表格字段中input以下格式的date:2014年6月22日代表2014年6月22日。然后,date被parsing为:
entryData.dateEntry = moment( $(form).find('input[name=dateEntry]').val(), 'DD-MM-YYYY' ).toDate();
最后,我的入口模型被添加到一个backbone.js集合中,并通过Node.js + Express在MongoDB中存储在服务器端。
询问Mongo的参赛作品,我看到:
2014-06-21 22:00:00 +0000
对应于“dateEntry”:date(1403388000000)。
谷歌search,我发现,MongoDB没有时区的概念。 所有的date都以UTC存储,我创build的date对象有GMT + 2。 但是我真的很害怕…我怎样才能轻松地取回当地时区的date?
接下来,我将通过以下方式在下划线模板中显示条目数据:
<%= moment(dateEntry).format('DD/MM/YYYY') %>
而…瞧! 我得到我当地的“意大利”的date:22/06/2014。
现在,我的问题是,正确的路要走吗?
这个过程是:在本地时区parsingdate=>存储在utc =>在本地时区获取date。 这是常见的做法吗?
我也想:我不能简单地避免使用时区,因为它是utc时间(2014-06-22 00:00:00)吗? 那么糟糕吗?
是的,通常的做法是将所有时间戳存储在UTC中,然后将其转换为外层中的特定时区。 很多框架自动为你做,包括Rails。 比方说,如果前进,你也开始迎合其他时区,因为你的数据库有UTC条目,所以你不会遇到任何问题。 您将节省时区转换的开销。
如果你只想保存date,你也可以这样做,但是我没有看到你现在这样做的任何伤害 – 保存在UTC的一切。 我不确定node.js,但会有一些设置,您可以指定(意大利)的时区,所有的转换将自动发生。 你可能会发现这个线程很有用:
如何在node.js中设置默认时区?