【问题标题】:How to add 1 UTC day to javascript date?如何将 1 UTC 天添加到 javascript 日期?
【发布时间】:2018-03-22 02:58:43
【问题描述】:

使用 javascript,我如何获取非 UTC 日期,添加 1 个 UTC 天,将时间归零,然后将其转换为 ISO 字符串?


new Date().toISOString()

2017-10-10T16:00:49.915Z


所需的 UTC 日期字符串

2017-10-11T00:00:00.000Z

【问题讨论】:

标签: javascript date datetime utc iso


【解决方案1】:

下面我以毫秒为单位获取日期,以毫秒为单位添加 1 天。 然后我以毫秒为单位除以一天,截断,然后以毫秒为单位再次乘以一天。

var d = new Date('2017-10-10T16:00:49.915Z');

function nextDayUTC(d) {
  var aDay = 1440 * 60 * 1000;
  var d2 = new Date( Math.trunc((d.getTime() + aDay)/aDay)*aDay);
  return d2;
}

function nextDayLocal(d) {
  //basically set to start of the day
  //add 36 hrs, this pretty much ensures next day
  //add then reset the hours back to 0
  var hr36 = 36 * 60 * 60 * 1000;
  var d2 = new Date(d);
  d2.setHours(0,0,0,0); 
  d2.setTime(d2.getTime() + hr36);
  d2.setHours(0,0,0,0);
  return d2;
}

console.log(d)
console.log("Next Day UTC");
console.log(nextDayUTC(d).toISOString());
console.log("Next Day Local");
console.log(nextDayLocal(d).toString());

【讨论】:

  • 这是否正确处理夏令时开始或结束前最后一天的情况?
  • 是的,因为我所做的一切都将基于 UTC。夏令时更多的是渲染。 UTC 时间是恒定的。
  • 啊,是的!抱歉,我不知何故忽略了它正在渲染为 ISO 格式而不是特定于语言环境。 :)
  • 我已经更新为第二天使用当地时间,.. 糟糕,又更新了一个错误.. :)
  • 添加 UTC 日期比 d.setUTCDate(d.getUTCDate() + 1) 简单得多。此外,无需在nextDayLocal 中创建第二个日期,甚至无需计算 36 小时内的毫秒数,您可以使用d2.setUTCHours(d2.getUTCHours() + 36) 甚至var d2 = new Date(+d + hr36)。 ;-)
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多