2017-07-25 120 views
1

我需要以ISO格式向服务器发送日期值"YYYY-MM-DDTHH:mm:ss.SSS[Z]"我不需要时间细节,因此我将它们设置为零。在JavaScript中将预定义日期值格式化为ISO格式

对于我使用下面的代码

var today = new Date(); 
var todayWithTimeAsZero = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0); 

我得到todayWithTimeAsZeroTue Jul 25 2017 22:06:03 GMT+0530 (India Standard Time)

现在我该怎样转换这个日期为ISO格式。我到处研究,但没有运气。

我试过var day = todayWithTimeAsZero.toISOString();,但是这会创建一个新的日期对象,其中的时间值填充得像2017-07-24T18:30:00.000Z一样。此外,我在我的项目中有时可能会以某种方式使用它。

+0

有什么不对todayWithTimeAsZero.toISOString();? –

+0

它正在用新的时间值更新零。 – underdog

回答

1

随着moment.js就可以得到当前的日期为UTC,然后设置时间值为零,并获得ISO字符串:

moment() // current date 
.utc() // convert to UTC 
.hours(0).minutes(0).seconds(0).milliseconds(0) // set time values to zero 
.toISOString() // format to ISO8601 

格式化字符串的值是2017-07-25T00:00:00.000Z


您还可以使用的DatesetUTCxxx方法:

var today = new Date(); 
today.setUTCHours(0); 
today.setUTCMinutes(0); 
today.setUTCSeconds(0); 
today.setUTCMilliseconds(0); 

today.toISOString()2017-07-25T00:00:00.000Z

+1

您可以一次清零时间:'today.setUTCHours(0,0,0,0)'。 – RobG

1

如果您创建日期,然后将UTC时间归零并获取日期,那么它将与时区偏移期间的本地日期不同。对于UTC + 1000中的某人,UTC日期为昨天至10:00。对于使用UTC-0600的用户,将在18:00(下午6点)之后“明天”。

无论如何,没有任何库,你可以这样做:

var d = new Date(); 
 
d.setUTCHours(0,0,0,0); 
 
console.log(d.toISOString());