在 javascript 中获取没有时间的日期 ISO 字符串

Get date ISO string without time in javascript

有没有一种方法可以在 javascript 中获取新日期类型的 ISO 字符串,时间是午夜,而无需重建带有日期部分的新日期或格式化它?

我一直在努力this

var date = new Date();
date.setHours(0, 0, 0, 0);
document.write(date.toISOString());

我得到了这个

2017-04-20T04:00:00.000Z

我想要这个

2017-04-20T00:00:00.000Z

是否有内置函数或方法,如我一直尝试做的那样,以获得所需的输出(使用日期部分重建日期对象)?

只需使用 setUTCHours 而不是 setHours 并补偿时区:

    var date = new Date();
    var timezoneOffset = date.getMinutes() + date.getTimezoneOffset();
    var timestamp = date.getTime() + timezoneOffset * 1000;
    var correctDate = new Date(timestamp);
    
    correctDate.setUTCHours(0, 0, 0, 0);
    document.write(correctDate.toISOString())

setHours 将设置您当地时区的时间,但当您显示它时,它会显示 UTC 时间。如果你一开始就设置为UTC,你会得到你想要的结果。

编辑:

请注意,如果您比 UTC 早 ,您的日期将存储为前一天的 UTC 日期,因此 运行 setUTCHours 不会按预期工作,将您的日期更改为前一天的午夜。因此,您首先需要将时区偏移量添加到日期。

var isoDate = new Date().toISOString().substring(0,10);
console.log(isoDate);

如果您可以依赖伟大的 momentjs.com 库,它会像这样简单:

moment().format('YYYY-MM-DD');

moment().toISOString();

如果您希望您的代码在逻辑上持久,基于硬编码索引的子字符串永远不会安全:

var iso = date.toISOString();
iso = iso.substring(0, iso.indexOf('T'));

date-fns format

import {format} from "date-fns-tz"    
format(new Date(), 'yyyy-MM-dd')