【问题标题】:Create UTC date in JavaScript, add a day, get unix timestamp在 JavaScript 中创建 UTC 日期,添加一天,获取 unix 时间戳
【发布时间】:2012-09-13 19:03:36
【问题描述】:

我正在尝试在 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 中维护它吗?

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

任何帮助都会很棒!

谢谢

【问题讨论】:

标签: javascript timestamp utc


【解决方案1】:

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

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()

【讨论】:

  • 我将如何合并它,同时能够设置日期的小时/分钟?
  • 抱歉,我浏览了一下,以为您只是想在当前时间上增加一天。已更新。
【解决方案2】:

使用您的代码尝试以下 DEMO

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

【讨论】:

  • 这似乎在做同样的事情,如果我使用 epochconverter,我会得到 GMT: Thu, 13 Sep 2012 19:25:00 GMT Your time zone: Thu Sep 13 2012 15:25:00 GMT-4,GMT 应该有 15:25:00 而不是我的时区。
  • 也试试看这篇文章:stackoverflow.com/questions/439630/…
  • 谢谢!这真的让我发疯了。
【解决方案3】:

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

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

jsfiddle

【讨论】:

  • 这没有意义。 Date.now() 始终以 UTC 进行交易。
猜你喜欢
  • 1970-01-01
  • 2018-01-17
  • 2017-10-07
  • 1970-01-01
  • 2016-03-25
  • 2013-09-03
  • 1970-01-01
  • 2012-01-30
  • 2019-06-10
相关资源
最近更新 更多