JavaScript/NodeJS-Mongo DB获取带偏移量的日期(时区)

JavaScript/NodeJS - Mongo DB gets Dates with offsets (timezone)

本文关键字:日期 时区 偏移量 NodeJS-Mongo DB 获取 JavaScript      更新时间:2023-09-26

我们正在从Mongo数据库加载日期。看起来Mongo将所有内容都保存在UTC中,但当JS创建Date对象(用于显示此日期)时,它会添加/减少时区偏移。结果是,例如:

  • 如果我保存日期"2013-06-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;
    }

但它真的很难看,每次实例化一个新的Date()时我都必须这样做

有人知道解决这个问题的好方法吗?

因此,当您在web浏览器中实例化Date对象时,它将位于浏览器的本地时区。有时这有帮助,有时没有。您可以使用moment.js moment.utc(myDate)来处理此问题,并将事情保持在UTC。总的来说,我强烈推荐moment.js作为你去瑞士军刀的日期相关代码。

另一种方法是将客户端更改为不向服务器提交字段,除非它们的值确实发生了更改。