解决MongoDB存储时间时差的问题

Posted levinhax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决MongoDB存储时间时差的问题相关的知识,希望对你有一定的参考价值。

MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中,当我们取出存储的时间时,就会出现时差的问题。比如我们用的北京时间,读取到的数值就会看到比当前时间少了8个小时,难道说我们在每次读取的时候都要单独处理一下时间吗,这就比较麻烦。其实,我们可以在存储的时候进行相应的处理,只需使用getTimezoneOffset()和toISOString()函数。

getTimezoneOffset函数:返回此地区的时差(当地时间与GMT格林威治标准时间的地区时差),单位为分钟。

<script>
  // 我们是东八区
  var d = new Date();
  var tz = d.getTimezoneOffset();
  console.log(tz);  // -480
</script>

toISOString()函数:使用ISO标准将 Date 对象转换为字符串。

该标准称为 ISO-8601 ,格式为: YYYY-MM-DDTHH:mm:ss.sssZ。

封装时间转换函数

localDate(v) {
    const d = new Date(v || Date.now());
    d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
    return d.toISOString();
},

我们在存储时间的时候调用localDate()这个函数就可以了,无论你处在哪个时区结果显示都和当地时间一样。

以上是关于解决MongoDB存储时间时差的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何查询 mongodb 中的日期,以便删除时差小于 1 小时的条目?

Redshift - 问题在存储在表中的表中显示时差

mongodb snappy 压缩数据大小与存储大小

如何在 Oracle 中以 12 小时格式存储日期的 2 个日期之间的小时时差?

解决 linux和widows双系统时差8个小时问题

MongoDB GridFS