【问题标题】:javascript/json date literaljavascript/json 日期文字
【发布时间】:2011-01-31 00:49:51
【问题描述】:

JSON/JavaScript 的日期文字是什么(如果确实存在的话?)

【问题讨论】:

    标签: javascript json date literals


    【解决方案1】:

    对于日期的字符串表示,JSON 使用字符串表示法,例如“2010-03-24 ...”,对于对象表示,它使用对象表示法“{...}”

    【讨论】:

    • 关于日期,如果它们使用相同的表示法,它如何知道一个字符串是日期而不是字符串?
    【解决方案2】:

    日期文字没有特殊格式。

    在 Javascript 中,您可以编写 new Date(2010, 2, 23)(不幸的是,月份是从零开始的)。

    【讨论】:

    • 年-月-日对吗? JSON呢?日期的可接受值是多少?
    • 是的。对于 JSON,没有标准;你需要使用一个普通的字符串。
    • 然后,你如何在javascript中使用它?我应该这样做:var myDate = new Date(jsonObj.date); ???
    【解决方案3】:

    取决于序列化程序。

    它可能是以下之一:

    /日期(1224043200000)/

    /Date(1198908717056)/ (MS JSON 日期)

    /日期(1198908717056-1000)/(+/-时区)

    new Date("2010-03-24") (据我了解,这是普遍接受的“javascript json”)

    “2010-03-24”

    【讨论】:

    • 这不是 我的 错,没有实际的文字,每个序列化程序都不同,但这是一个提供实用答案的地方,而不是迂腐的吹毛求疵。
    【解决方案4】:

    日期文字 were proposed and then retracted,也许我们会在 ECMA-262 规范的未来版本中看到它们。

    由于there is no Date literal in JavaScript,JSON 也没有文字(如果 JavaScript 引擎无法解析 JavaScript 对象表示法,它的名称就不是太好了 ;-))。诚然,这是不幸的。许多 Web 服务会输出一个 ISO 8601 字符串,例如2010-03-23T23:57Z,但要在 JavaScript 中解析它,您需要使用自定义库、创建自定义函数或依赖 ECMAScript 5th 的日期解析规范,该规范指出实现应该原生解析 ISO 8601 字符串。

    如果要在 JavaScript 中解析的是您自己的 JSON,您可以使用简单的东西,例如自 1970 年 1 月 1 日 00:00 起的毫秒数和标识符,然后将 reviver 函数传递给 JSON.parse:

    var myJSON = '{"MyDate":"@1269388885866@"}'
    var myObj  = JSON.parse(myJSON, function (key, value)
    {
       // Edit: don't forget to check the type == string!
       if (typeof value == "string" && value.slice(0, 1) == "@" && value.slice(-1) == "@")
           return new Date(+value.substring(1, -1));
       else
           return value;
    }
    

    显然,您需要使用现代浏览器中的原生 JSON 对象或 json2.js 在解析时使用 reviver。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多