【发布时间】:2014-10-24 23:07:59
【问题描述】:
我只想得到专家的确认。 我仍然对我认为在这种环境中存储和处理日期的正确方法没有信心。
我正在开发一个小应用程序,仅供意大利用户使用。
基本上,他们可以创建一个条目列表,每个条目都有一个creationDate(我只对日期部分感兴趣,时间在我的场景中没有用处)。
因此,用户在“日期”表单字段中输入以下格式的日期:22/06/2014 表示 2014 年 6 月 22 日。然后,日期被解析为:
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”:日期(1403388000000)。
四处搜索,我发现 MongoDB 没有时区的概念。所有日期都以 UTC 格式存储,而我之前创建的日期对象为 GMT+2。 但我真的很害怕......我怎样才能以简单的方式找回我当地时区的日期?
接下来,我将在下划线模板中显示条目数据,这样:
<%= moment(dateEntry).format('DD/MM/YYYY') %>
还有……瞧!我得到了我当地的“意大利”日期:22/06/2014。
现在,我的问题是:这是正确的方法吗?
过程是:在本地时区解析日期 => 以 utc 存储 => 在本地时区检索日期。 这是一种常见的做法吗?
我还想:我不能简单地避免使用时区并将本地(意大利)时间存储为 UTC 时间(2014-06-22 00:00:00)吗? 有这么糟糕吗?
【问题讨论】:
-
我将所有东西都设置为 UTC 从前到后(数据库、服务器、客户端通信等),时区在应用程序的最外边缘处理。我通常在 Rails 中工作,所以我不知道在 node.js 世界中通常是如何完成的。
标签: node.js mongodb date backbone.js momentjs