【问题标题】:Formatting a predefined Date value to ISO format in JavaScript在 JavaScript 中将预定义的日期值格式化为 ISO 格式
【发布时间】:2017-07-25 16:37:47
【问题描述】:

我需要以 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); 

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

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

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

【问题讨论】:

  • todayWithTimeAsZero.toISOString(); 有什么问题?
  • 它正在用新的时间值更新零。

标签: javascript date date-formatting iso8601


【解决方案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

【讨论】:

  • 您可以一次将时间归零:today.setUTCHours(0,0,0,0).
【解决方案2】:

如果您创建一个日期,然后将 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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多