【问题标题】:What is the best way to initialize an JS Date to local midnight?将 JS 日期初始化为当地午夜的最佳方法是什么?
【发布时间】:2021-04-16 06:43:22
【问题描述】:

我对 StackOverflow 进行了大量研究,但似乎没有找到正确的答案。

假设我有一个yyyy-MM-dd 格式的日期,我正在尝试用它创建一个日期对象。以 2014-04-04 为例。当我做new Date("2014-04-04") 时,它会导致:

2014 年 4 月 3 日星期四 20:00:00 GMT-0400(东部夏令时间)

但我真正想要的是当地时区的那个日期的午夜,像这样:

2014 年 4 月 4 日星期四 00:00:00 GMT-0400(东部夏令时间)

在没有库的 JS 中最快的方法是什么?

【问题讨论】:

  • 这不是问题要问的。 setHours(0,0) 将导致 Thu Apr 03 2014 00:00:00 GMT-0400 (Eastern Daylight Time) 与示例
  • 然后在另一个午夜使用date.setHours(24, 0) :-)

标签: javascript date datetime


【解决方案1】:

格式为 yyyy-MM-dd 的时间戳由它们的内置解析器解析为 UTC(根据 ECMA-262),因此对于设置为负 UTC 偏移量的系统,本地日期将是前一天。因此,您必须首先将字符串解析为本地日期,此时您还可以将时间设置为 24:00,或者只是在当天添加一个(+1 超过月底的情况由构造函数,因此 4 月 31 日变为 5 月 1 日)。

// Parse date in format yyyy-mm-dd as local midnight
// at the end of the day
function parseAsLocalMidnight(s) {
  let [y, m, d] = s.split(/\D/);
  return new Date(y, m-1, +d + 1);
  // or
  // return new Date(y, m-1, d, 24);
}

console.log(parseAsLocalMidnight('2021-04-17').toString()); // Sun Apr 18 2021 00:00:00 [local offset]

当然,如果你想在一天开始的午夜,不要加 1。:-)

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2013-08-25
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2013-12-02
    • 2012-02-08
    相关资源
    最近更新 更多