2014-04-18 47 views
0

我们正在从Mongo数据库中载入日期。看来Mongo保存UTC中的所有内容,但是当JS创建Date对象(用于显示此日期)时,它会添加/减去时区偏移量。其结果是,例如:
JavaScript/NodeJS - MongoDB获取具有偏移量的日期(时区)

  • 如果我保存日期“2013年6月20日01:00:00”
  • 的日期将于稍后在表单自动完成为“2013-06 -19 22:00:00“(阿根廷时区UTC-03:00的示例),如果用户在不更改日期的情况下保存该表单,日期将以错误的时间保存。
  • 最糟糕的是,下次保存会减少3小时以上,等等!

正如你所看到的,我可以得到不同的日子,我想要保存的日子。 我看到一些类似的情况,但没有与这种相同的技术,我使用Nodejs,MongoDB和Backbone。现在我在做这样的事情:

parse: function(response) { 
     var dateStart = new Date(response.time.start); 
     var offset = dateStart.getTimezoneOffset() * 60000; 
     response.time.start = new Date(dateStart.valueOf() + offset); 
     return response; 
    } 

但它确实难看,我有我每次实例化一个新的日期时间做()

任何人都知道一个好的方法来解决这一问题?

回答

1

很遗憾,当您在Web浏览器中实例化Date对象时,它将位于浏览器的本地时区中。有时这有助于,有时不会。你可以使用moment.jsmoment.utc(myDate)来处理这个问题,并保持UTC。总的来说,我强烈建议您使用日期相关代码的瑞士军刀。

另一种方法是将客户端更改为不向服务器提交字段,除非其值已真正改变。

+0

我挣扎着一个类似的问题,但对我来说,技巧是当我使用一个字符串对象,其中momentjs为我创建它似乎将字段存储在一个字符串中,而不是ISODate('.....' )格式。如果我使用javascript日期()对象它mongo pics了它是一个日期并将其存储为ISODate。所以问题是你如何让mongo读一个日期来约会...... –

+0

使用当前实例的'toDate()'函数返回到一个常规的javascript日期实例。 –