【问题标题】:Issue in timezone with Node.js Module 'time'Node.js 模块“时间”的时区问题
【发布时间】:2013-01-31 04:02:28
【问题描述】:

我刚刚遇到了今天发生的一个问题(由于 1 月 31 日在澳大利亚悉尼)。基本上,给定年份、日期、小时、分钟、秒。我想创建一个日期,就像我在时区(澳大利亚/悉尼)中一样,然后将其转换为 UTC(即获取毫秒)。

这是因为数据库(和服务器)在 UTC 中工作,因为客户端可以在任何给定的时区(当完成发布请求时,客户端同时提供时区和年份,月、日、时、分、秒值)

问题是,当我为今天创建一个日期时,它会将日期一直追溯到本月的 1 月 3 日,这是说明问题的代码

var scheduled, someTime, time, timeinfo, timezone;
process.env.TZ = 'UTC';
time = require('time');

timeinfo = {
    hour: 14,
    minute: '47',
    year: 2013,
    month: 1,
    date: 31
};

timezone = 'Australia/Sydney';
someTime = new Date(timeinfo.year, timeinfo.month - 1, timeinfo.date, timeinfo.hour, timeinfo.minute, 1, 1);
scheduled = time.Date(timeinfo.year, timeinfo.month - 1, timeinfo.date, timeinfo.hour, timeinfo.minute, 1, 1, timezone);
console.log(someTime);
console.log(scheduled);

在 Node.js 中运行时,console.log(scheduled); 输出的时间完全关闭。

注意:我使用的是time npm library

【问题讨论】:

标签: node.js time timezone offset


【解决方案1】:

似乎是节点时间如何计算时区的错误,与进行转换时的操作顺序有关。目前有一个open issue (#28) on github.com

我已经提交了pull request,同时尝试一下,看看它是否适用于您的特定情况。

【讨论】:

    【解决方案2】:

    请尝试以下代码

    1.格林威治标准时间

    var GMTtimeObj = new Date();
    

    2.UTC时间:

    var UTCtimeObj = +new Date();
    

    让我知道它是否符合您的要求。

    通过this post's answers 也可以帮助你..

    【讨论】:

      【解决方案3】:

      这是最近修复的一个bug,请看https://github.com/TooTallNate/node-time/pull/30

      现在可以正常使用了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-28
        • 2012-08-07
        • 2020-05-09
        • 2012-09-01
        • 1970-01-01
        • 2014-01-01
        • 2013-11-09
        • 1970-01-01
        相关资源
        最近更新 更多