V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nyse
V2EX  ›  Node.js

一个关于 Linux 时区和 JS 获取的时间的问题?

  •  
  •   nyse · 2019-05-24 14:15:37 +08:00 · 5259 次点击
    这是一个创建于 2019 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在服务器上,执行

    date
    
    # 返回的时间戳的时区是 CST,如:Fri May 24 14:07:12 CST 2019
    
    

    在 NodeJS 里执行

    new Date() //返回的时间比上面获取的时间慢几个小时(说明时区不一样)
    

    由于 用 PM2 管理进程,而 PM2 是基于 JS 写的,导致设置 cron 的任务时间都有问题。

    想知道 JS 获取到的时间是根据上面时区的,难道不是随系统的吗?

    8 条回复    2019-05-25 14:21:42 +08:00
    blankme
        1
    blankme  
       2019-05-24 14:22:05 +08:00 via Android
    默认输出 utc 吧,这样不会引起混淆
    nyse
        2
    nyse  
    OP
       2019-05-24 14:34:14 +08:00
    @blankme 在我电脑上 new Date().getHours() 返回的是我电脑时区当前的小时啊。。。
    behanga
        3
    behanga  
       2019-05-24 14:43:36 +08:00
    NodeJs 内部使用 ICU 进行时间格式化
    zhuisui
        4
    zhuisui  
       2019-05-24 16:56:07 +08:00
    服务器里设置时区就行了,相关包是 tzdata 和 TZ 环境变量
    `new Date()` 打印的是 UTC 时间

    @nyse getHours 返回本地时间,你的电脑上已经设置了时区
    nyse
        5
    nyse  
    OP
       2019-05-24 22:04:52 +08:00
    @zhuisui 是啊,但我执行 date 出来的是 CST 时间啊,为什么 getHours 慢了几个小时呢?
    zhuisui
        6
    zhuisui  
       2019-05-25 12:44:27 +08:00
    @nyse 只说你的服务器
    date 打印出来的 CST 是 China Standard Time
    TZ=Asia/Shanghai date 北京时间
    TZ=CST date (这里的 CST 是 Central Standard Time ) CST 时间
    然后看 node 里 new Date().getTimezoneOffset() 的结果是不是 -480
    nyse
        7
    nyse  
    OP
       2019-05-25 13:39:04 +08:00
    @zhuisui
    看了一下,date +"%Z %z" 出来的时区是 CST +0800,
    但是 node 里 new Date().getTimezoneOffset() 的结果是 240

    我也觉得好奇怪。
    nyse
        8
    nyse  
    OP
       2019-05-25 14:21:42 +08:00
    @zhuisui

    执行 timedatectl 输出:
    。。。
    Time zone: America/New_York (CST, +0800)
    Network time on: yes
    NTP synchronized: yes
    RTC in local TZ: no

    搞不懂为什么 America/New_York 也是 +0800...

    通过修改
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    改了时区就可以了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 08:49 · PVG 16:49 · LAX 00:49 · JFK 03:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.