0

我正在尝试在 JavaScript 中以 UTC 格式构建日期,同时指定一小时和一分钟,然后获取它的时间戳。

例如,如果我有 15 小时和 25 分钟,我正在这样做:

var to_date = new Date();
to_date.setUTCHours(15);
to_date.setUTCMinutes(25);
var to_utc = new Date(to_date.getUTCFullYear(), 
              to_date.getUTCMonth(), 
              to_date.getUTCDate(), 
              to_date.getUTCHours(), 
              to_date.getUTCMinutes(), 
              to_date.getUTCSeconds());
var to_unix = Math.round(to_utc.getTime() / 1000);
console.log(to_unix);

问题是这似乎没有返回正确的时间戳。它设置的时间不是UTC,而是我的时区。知道如何在 UTC 中维护它吗?

如果超过当前时间,我还想在时间上添加一天。我试过检查 current 并添加60*60*24,但这返回的分钟/小时与我指定的不匹配。

任何帮助都会很棒!

谢谢

4

3 回答 3

5

如果您正在修补现有的日期对象:

var d = new Date();
d.setUTCHours(15);
d.setUTCMinutes(25);
d.setUTCSeconds(0);

d现在将代表今天 15:25 UTC。

如果你从头开始:

var d = new Date(Date.UTC(year, jsmonth, day, utchour, utcminute, utcsecond));

要获取 unix 时间戳,请使用getTime,它返回自 UTC 纪元以来的毫秒数,然后除以 1000 以转换为 unix 时间(以而不是毫秒为单位):

Math.round(d.getTime() / 1000);

Date.now()为您提供自纪元以来的 UTC 当前时间(以毫秒为单位)。添加一天并查看它是否在未来:

d.getTime() + (1000*60*60*24) > Date.now()
于 2012-09-13T19:24:25.943 回答
1

使用您的代码尝试以下演示。

要摆脱时区,请使用to_date.setHours(0,0,0,0);将时间设置为00:00:00:00

于 2012-09-13T19:11:41.973 回答
1

表单链接:getTimezoneOffset()方法返回UTC时间与本地时间的时差,单位为分钟。以下应该可以解决您的问题

var to_unix = Math.round( (Date.now() + (new Date().getTimezoneOffset()) )  / 1000);
console.log(to_unix);

jsfiddle

于 2012-09-13T19:31:23.703 回答