将预定义日期值格式化为 JavaScript 中的 ISO 格式

Formatting a predefined Date value to ISO format in JavaScript

我需要以 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。我的项目中也有 momentjs,我可能会以某种方式使用它。

使用 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

如果您创建一个日期,然后将 UTC 时间归零并仅获取日期,则在时区偏移期间,它将与本地日期不同。对于 UTC+1000 中的某人,UTC 日期是昨天直到 10:00。对于使用 UTC-0600 的用户,它将在 18:00(下午 6 点)之后 "tomorrow"。

无论如何,没有任何图书馆你可以做:

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