【问题标题】:setHours in different timezones不同时区的 setHours
【发布时间】:2020-07-22 17:46:11
【问题描述】:

我正在比较两个日期,但问题是当我使用 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(),即使我向它们添加时间,它们都会记录相同的日期,它的设置小时(或分钟等)会改变时区

【问题讨论】:

    标签: javascript date timezone


    【解决方案1】:

    一些事情:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      相关资源
      最近更新 更多