有没有一种方法可以在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不能按预期工作,将您的日期更改为前一天的午夜.因此,您首先需要将时区偏移量添加到日期.