将JS日期初始化为本地午夜的最佳方式是什么



我在StackOverflow上做了很多研究,但似乎没有找到合适的答案。

假设我有一个格式为yyyy-MM-dd的日期,我正试图用它创建一个date对象。以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中,最快的方法是什么?

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。:-(

最新更新