首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
nyse
V2EX  ›  Node.js

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

  •  
  •   nyse · 243 天前 · 2416 次点击
    这是一个创建于 243 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在服务器上,执行

    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   243 天前 via Android
    默认输出 utc 吧,这样不会引起混淆
    nyse
        2
    nyse   243 天前
    @blankme 在我电脑上 new Date().getHours() 返回的是我电脑时区当前的小时啊。。。
    behanga
        3
    behanga   243 天前
    NodeJs 内部使用 ICU 进行时间格式化
    zhuisui
        4
    zhuisui   243 天前
    服务器里设置时区就行了,相关包是 tzdata 和 TZ 环境变量
    `new Date()` 打印的是 UTC 时间

    @nyse getHours 返回本地时间,你的电脑上已经设置了时区
    nyse
        5
    nyse   243 天前
    @zhuisui 是啊,但我执行 date 出来的是 CST 时间啊,为什么 getHours 慢了几个小时呢?
    zhuisui
        6
    zhuisui   242 天前
    @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   242 天前
    @zhuisui
    看了一下,date +"%Z %z" 出来的时区是 CST +0800,
    但是 node 里 new Date().getTimezoneOffset() 的结果是 240

    我也觉得好奇怪。
    nyse
        8
    nyse   242 天前
    @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
    改了时区就可以了。。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   786 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 21:53 · PVG 05:53 · LAX 13:53 · JFK 16:53
    ♥ Do have faith in what you're doing.