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

时间:2017-04-20 19:56:32

标签: javascript date time isodate

有没有办法在午夜时间在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

是否有内置功能或方法,因为我一直试图获得所需的输出(使用日期部分重建日期对象)?

4 个答案:

答案 0 :(得分:3)

只需使用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日期,因此运行setUTCHours将无法正常工作,从而更改您的日期从前一天的午夜开始。因此,您首先需要将时区偏移量添加到日期。

答案 1 :(得分:1)

var date=new Date();
var corrected = date.toISOString().substring(0,10);
alert(corrected);

答案 2 :(得分:0)

如果您可以依靠强大的momentjs.com库来生活,那么就这么简单:

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

moment().toISOString();

答案 3 :(得分:-1)

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

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