【问题标题】:ISO date convert issueISO日期转换问题
【发布时间】:2013-07-02 18:52:31
【问题描述】:

我有以下日期:

new Date('Sun Jun 30 2013 00:00:00 GMT+0530 (India Standard Time)')

我想将其转换为 toISOString,为此我尝试了以下代码:

new Date('Sun Jun 30 2013 00:00:00 GMT+0530 (India Standard Time)').toISOString()

但它给了我以下输出:

"2013-06-29T18:30:00.000Z"

我想要以下输出:

  "2013-06-30T00:00:00.000Z"

即忽略本地时间偏移。

【问题讨论】:

  • 我已经检查了那个链接,我需要 ISO 日期。
  • ISO 是一种格式,不是时区:)
  • 您需要不同时区的 ISO 格式
  • 我只想忽略本地时间偏移。

标签: javascript jquery isodate


【解决方案1】:

由于您从 +5:30 的值开始,因此结果值在前一天 18:30 UTC 是完全合理的。它必须减去 5 小时 30 分钟才能确定 UTC 时间。

您说您希望将值恢复为 2013-06-30T00:00:00.000Z - 但您必须明白,那将是一个完全不同的时刻Z 不仅仅是为了漂亮 - 它特别表明时间是 UTC。

如果您希望原始时区中的值采用 ISO 格式,则将时区偏移量指定为字符串的一部分,例如 2013-06-30T00:00:00.000+05:30

现在,您还应该了解对解析日期字符串的支持,就像您在第一行代码中所做的那样,高度依赖于浏览器。不同的浏览器支持不同的字符串输入,但其他浏览器不支持。您可能会发现使用您所做的输入值并不适用于任何地方。

即使.toISOString() 也并非所有浏览器都支持。它存在于大多数较新的浏览器中,但并非无处不在。即使它可用,它也会总是返回 UTC 的 ISO 字符串,而不是我上面显示的扩展格式。您可以阅读 this post 以获取获取完整扩展 ISO 字符串的选项。

【讨论】:

    【解决方案2】:

    我不太确定,但如果你想要这样的输出,我尝试像这样更改代码。

    new Date('Sun Jun 30 2013 00:00:00 GMT+0530 (India Standard Time) UTC')

    toISOString

    【讨论】:

    • @Teemu 什么无效日期?我尝试这样并且工作得很好。 var d = new Date('Sun Jun 30 2013 00:00:00 GMT+0530 (India Standard Time) UTC'); console.log(d.toISOString())
    • 看来我着急了,刚在IE10中测试了一下,其他浏览器好像都可以正常工作了。
    【解决方案3】:

    如果您正在使用矩库 试试这个:

    moment.utc(new Date().toISOString()).format();
    

    【讨论】:

    • 欢迎来到 SO。请在答案中格式化您的代码。
    【解决方案4】:

    你基本上可以平衡减去的 5:30 小时

    //create date object
    var date = new Date('Sun Jun 30 2013 00:00:00 GMT+0530 (India Standard Time)');
    //add 330(5:30 hrs) mins in ms 
    date.setTime(date.getTime() + (330 * 60 * 1000));
    //output in iso format
    var ans  = date.toISOString()
    

    【讨论】:

    • 当涉及 DST 时,每年两次很容易出错。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多