1

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

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

问题是,当我为今天创建日期时,它会将日期一直追溯到本月 3 日的 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

4

3 回答 3

1

似乎是节点时间如何计算时区的错误,与进行转换时的操作顺序有关。截至目前,github.com 上有一个未解决的问题(#28) 。

我已经提交了一个拉取请求,同时尝试一下,看看它是否适用于您的特定情况。

于 2013-01-31T07:15:56.353 回答
0

请尝试以下代码

1.格林威治标准时间

var GMTtimeObj = new Date();

2.UTC时间:

var UTCtimeObj = +new Date();

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

仔细阅读这篇文章的答案,它可能会对您有所帮助..

于 2013-01-31T08:59:23.633 回答
0

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

它现在工作得很好

于 2013-02-03T02:56:16.693 回答