设置不同时区的小时

iLi*_*LiA 3 javascript timezone date

我正在比较两个日期,但问题是,在我的本地计算机生成的日期中,当我使用setHours这样的方法时console.log(new Date(new Date().setHours(8)));,它给我的时区的输出2020-07-22T04:41:46.624Z是 GMT+4(乔治亚标准时间),但在我的 Heroku 服务器(欧盟)或repl.it 上它给出了时区偏移量,-0它为我提供了2020-07-22T08:41:46.624Z完全相同的命令,我该如何解决这个问题?否则,如果我登录new Date()两台机器,即使我向它们添加时间,它们也会记录相同的日期,其设置小时(或分钟等)会改变时区

Mat*_*int 11

一些东西:

  • setHours函数解释本地时区的输入。所以是的 - 根据运行它的计算机的时区,您会得到不同的结果。您实际上是在说:“将时间设置为当地时间上午 8 点”。

  • 如果您打算将时间设置为 UTC 上午 8 点,则可以使用该setUTCHours函数。UTC 在整个地球上都是相同的,因此无论时区如何,您在本地和服务器上都会得到相同的结果。(假设您的操作系统已正确同步您的时钟。)

  • 字符串Z输出中的表示 UTC

  • 当您记录Date对象时,生成的字符串格式是特定于环境的。在某些环境中,您将获得如您所显示的输出,这与您调用的输出相同toISOString- 采用 ISO 8601 格式并且始终采用 UTC。在其他环境中,您将获得来自的输出toString- 它具有不同的格式,并且通常基于当地时间。关键是 - 没有标准来控制对象的日志输出Date。不要直接记录它 - 记录调用这两个函数之一的字符串结果(可能toISOString)。