在JavaScript中将预定义的Date值格式化为ISO格式

时间:2017-07-25 16:37:48

标签: javascript date date-formatting iso8601

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

为此,我使用以下代码

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

我将todayWithTimeAsZero作为Tue Jul 25 2017 22:06:03 GMT+0530 (India Standard Time)

现在如何将此日期转换为ISO格式。我到处研究但没有运气。

我尝试了var day = todayWithTimeAsZero.toISOString();,但这会创建一个新的日期对象,其时间值的填充方式与2017-07-24T18:30:00.000Z类似。另外,我的项目中的时刻可能会以某种方式使用它。

2 个答案:

答案 0 :(得分: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

您还可以使用setUTCxxx的{​​{1}}方法:

Date

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

答案 1 :(得分: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());