【问题标题】:How To Pass Dates In Zulu Format So They Will Work Regardless Of TimeZone如何以 Zulu 格式传递日期,以便无论时区如何它们都可以工作
【发布时间】:2016-09-30 16:50:10
【问题描述】:

我将日期传递给执行多个进程的后端函数。我有用户报告说他们在不同的时区遇到了故障(更具体地说是在海外,但还有几个来自沿海地区)。因此,我尝试将我的日期/时间格式化为 ZULU 时间,以使这些用户无论时区如何都能获得成功。

以下是我为传递给函数以解决问题而构建的格式。 05 小时的那个工作正常,但 00 的那个(我理解为与时区无关)失败了。

这失败了 1960-08-02T00:00:00:000Z

这行得通 1960-08-02T05:00:00.000Z

有一些日期转换 javascript 经验的人可以告诉我为什么会这样吗?

谢谢, 乙

【问题讨论】:

    标签: javascript angularjs date datetime


    【解决方案1】:

    因为两者的格式不同:

    1960-08-02T00:00:00:000Z
                       ^ colon
    1960-08-02T05:00:00.000Z
                       ^ period
    

    您应该使用后一种格式(另请参阅the spec),您会发现1960-08-02T00:00:00.000Z 也将被接受。

    【讨论】:

    • 就是这样。语法...谢谢
    【解决方案2】:

    任何 JavaScript 日期都可以使用 toISOStringtoJSON 转换为正确的 UTC (Zulu) 格式:

    new Date().toISOString();
    //"2016-09-30T16:56:51.654Z"
    

    【讨论】:

    • 这里真正的英雄是Date.prototype.toISOString()
    • 是的。 toJSON 返回相同的东西
    • toJSON 调用 toISOString。如果您要序列化Date,那么toJSON 更合适。如果您只是转换格式,请使用toISOString
    • @AndréDion 真的没有区别。 toJSON 只是 toISOString 的别名。它们都返回一个字符串。
    • 我不同意。虽然输出相同,但使用的语义不同。为了说明这一点,假设 JSON 规范发生了变化,因此日期现在表示为 unix 时间。 toJSON 将返回自 Epoch 以来的毫秒数,此答案将无效。在这种假设情况下,toISOString 仍会返回预期的 ISO 8601 格式。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-11-23
    • 2021-02-15
    • 2014-11-14
    • 2013-06-27
    相关资源
    最近更新 更多