我只想得到专家的确认。 我仍然对我认为在这样的环境中存储和处理日期的正确方法感到自信。
我正在为意大利用户开发一个小应用 。
基本上,他们可以创建一个条目列表,每个条目 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)。
在Google上搜索,我发现MongoDB没有时区的概念。所有日期都以UTC格式存储,我之前创建的日期对象格式为GMT + 2。 但我真的很害怕......我怎么能以简单的方式回到当地时区的约会?
接下来,我将以下划线模板显示条目数据:
<%= moment(dateEntry).format('DD/MM/YYYY') %>
而且......瞧!我得到了当地的'意大利'日期:22/06/2014。
现在,我的问题:是正确的方法吗?
该过程是:以本地时区解析日期=&gt;存储在utc =&gt;在当地时区检索日期。 这是一种常见做法吗?
我还想:我不能简单地避免使用时区并存储我的本地(意大利)时间,因为它是时间(2014-06-22 00:00:00)? 那么糟糕吗?
答案 0 :(得分:4)
是的,通常的做法是将所有时间戳存储在UTC中,然后将其转换为外层中的特定时区。许多框架会自动为您执行此操作,包括Rails。让我们说如果你今后开始迎合其他时区,你将不会遇到任何问题,因为你的数据库有UTC条目。您将节省时区转换的开销。
如果您只想保存日期,也可以这样做,但我认为目前的方式没有任何损害 - 以UTC格式保存所有内容。我不确定node.js但是会有一些设置你可以指定时区(意大利),你的所有转换都会自动发生。您可能会发现此主题很有用: