【问题标题】:Node.js Date does not consider DST (daylight saving time)Node.js Date 不考虑 DST(夏令时)
【发布时间】:2020-09-12 20:03:30
【问题描述】:

我住在加拿大北美西海岸的温哥华。这里的原始时区是 PST(太平洋标准时间,UTC - 8h),但现在是 PDT(太平洋夏令时,UTC - 7h),因为夏令时已经开始。

问题在于 Node.js 使用原始的非 DST 时间,而 Ubuntu 则返回 DST。

在下面,两者都应该是 21:44。

$ echo `date` , `node -e "console.log(new Date().toString())"`
Mon May 25 21:44:57 DST 2020 , Mon May 25 2020 20:44:57 GMT-0800 (GMT-08:00)

为什么会这样?如何让 Node.js 识别夏令时?

我在 Ubuntu 18.04.4 上使用 Noce.js v12.16.3 作为 Windows 10 上的 WSL。(适用于 Windows 的 Node.js v12.16.3 可以正常工作。)TZ 未设置环境。

更新我不想安装外部库。

【问题讨论】:

    标签: node.js timezone dst


    【解决方案1】:

    更准确的库是moment.js。您可以像这样设置识别夏令时的时间:

    moment(timestamp).tz(timezone).isDST()
    

    这是一个例子:

    moment(1451624400000).tz('America/New_York').isDST();
    

    您可以在我上面链接的网站上的文档中阅读有关公认时间戳和时区的更多信息。

    【讨论】:

      【解决方案2】:

      我的测试表明节点确实遵守夏令时:

      $ date; node -e "console.log(new Date().toString())";
      Fri Jul 17 23:13:32 EDT 2020
      Fri Jul 17 2020 23:13:32 GMT-0400 (Eastern Daylight Time)
      
      $ date --date='Fri Jul 17 2020 23:13:32 GMT-0400'
      Fri Jul 17 23:13:32 EDT 2020
      
      $ node -v
      v10.21.0
      
      $ lsb_release -a 
      No LSB modules are available.
      Distributor ID: Ubuntu
      Description:    Ubuntu 20.04 LTS
      Release:        20.04
      Codename:       focal
      

      【讨论】:

        猜你喜欢
        • 2013-09-22
        • 1970-01-01
        • 2011-08-14
        • 2018-01-01
        • 2020-03-01
        • 2018-02-04
        • 2017-09-15
        • 2012-07-03
        • 1970-01-01
        相关资源
        最近更新 更多