在打字稿中创建 UTC 日期

问题描述

我目前正试图强制我的应用程序使用 UTC 时间,无论系统时间是什么。我有一种创建日期的方法

  public static createDate(date: Date = new Date()): Date {
    return new Date(
      Date.UTC(
        date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDay(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds()
      )
    );
  }

但是,当它进入数据库时​​,我得到了提前 8 小时的时间。我不确定这里发生了什么。

我曾尝试使用其他解决堆栈溢出的解决方案,使用诸如 moment 和 date-fns 之类的库,但我没有任何运气。

解决方法

Date 对象在 UTC 中已经。它总是如此,因为它内部存储的唯一值是基于 UTC 的数字时间戳,表示自 1970-01-01 00:00:00.000 UTC 以来的毫秒数。您可以直接使用 .getTime().valueOf() 或通过将 Date 对象强制为 Number 的任何机制来查看该时间戳。您还可以使用 .toISOString() 来查看它的字符串表示。

您在问题中演示的方法只是复制 Date 对象的漫长而缓慢的方法。使用 new Date(date) 会得到相同的结果。

您说数据库中的时间偏移有问题,但您没有显示该部分代码或描述有关您的数据库的任何内容,因此我无法直接回答。您可能在如何将 Date 对象传递到正在转换为本地时间的数据库中遇到了细微的错误。

,

我意识到因为我在电脑上手动设置了时间,它使用了不同的时区,所以它返回了不同的时间。现在好像没事了。