MongoDB节点API上的ISODate和时区

我使用Node构build了一个API,IBM Strongloop框架以及一个MongoDB数据库。 我有一个date时区的问题。 在前端,我有一个反应datepicker创builddate对象。

我在法国,所以GMT + 1 。 如果我在2000年1月6日的前台创build了一个出生date ,XHR请求会发送“2000-01-05T23:00:00.000Z”给API。

如果我在前台尝试新date('2000-01-05T23:00:00.000Z'),我会得到正确的dateThu Jan 06 2000 00:00:00 GMT + 0100(CET)

在时区GMT + 0的API服务器上,如果检查数据库,我可以看到它是ISODate(“2000-01-05T23:00:00Z”)

如果我在服务器上尝试新date('2000-01-05T23:00:00Z'),我得到错误的dateWed Jan 05 2000 23:00:00 GMT + 0000(UTC)

当然,我的用户可以有不同的时区,所以将服务器时区设置为GMT + 1不会解决问题。

什么是正确的解决scheme? 发送date到服务器作为string,没有时区,并让它build立在插入之前的date? 还是有另一种方式?

理想的情况是像现在一样以一致的方式(GMT)保存数据服务器端。 应该留给客户端应用程序根据其时区发送/显示正确的偏移date。

对于需要存储的“仅限date”的数据,我认为将date时间分解为只有年,月和日是“ 容易的 ”。 您将此信息传输到您的服务器,并根据存储的服务器端的年,月和日创build一个新的UTC DateTime对象。 或者单独存储3个字段。

为了取回这些信息,你可以使用getUTCxxx() (xxx是日,月或年)Javascript方法。

或者你可以用正确的date前端创build一个新的UTC dateTime,并把它发送给后端,你的select。

如果你这样做,你将有正确的date存储在后端(如正确的date在午夜UTC)。

然后,当您查询前端显示的值时,可以强制只考虑date时间数据的(UTC)date部分,这是正确的年份,月份和date。

另外,对于Javascript,我强烈build议使用一些外部的“正确的”框架来处理date和时间,如果可以的话,像momentJS 。