【问题标题】:How to convert this date format: /Date(1268524800000)/? [duplicate]如何转换此日期格式:/Date(1268524800000)/? [复制]
【发布时间】:2012-01-05 20:44:38
【问题描述】:

可能重复:
How to format a JSON date?

我正在通过 Javascript 调用 JSON Web 服务,StartDate 字段是 /Date(1268524800000)/。如何将其转换为人类可读的格式?d

【问题讨论】:

  • 它是什么格式的?是时间戳吗?如果网络服务有文档,它应该在那里
  • 好吧,这种格式可能无法立即识别。我认为这么多反对票有点苛刻。 (但是 +1 @Nathan 发现了一个很棒的骗子)
  • 网络服务帮助说类型是"type="xs:dateTime""
  • 自 1970-01-01 00:00:00 UTC 以来似乎是毫秒;表示的日期是 Sun 2010-03-14 00:00:00 UTC。 (这并没有回答如何转换它的问题,但它提供了一个线索,告诉你如果你使用的是 JavaScript 以外的其他语言。)当然,将它转换为人类可读格式的一种方法是训练自己阅读该格式。 8-)}

标签: javascript ajax json date


【解决方案1】:

试试这个:

var str = "/Date(1268524800000)/";
var num = parseInt(str.replace(/[^0-9]/g, ""));
var date = new Date(num);
alert(date);

小提琴:http://jsfiddle.net/dS2hd/

【讨论】:

  • 如果数字是负数怎么办?
  • 不应该是因为它确实代表了来自系统的日期
  • @TruMan1 - 1969 年之前的任何日期在 JavaScript 中都有一个负序列号。
  • 在@gilly3 之前不知道该反向引用:/(\-?\d+)/.test(str) ? new Date(+RegExp.$1) : null;
  • 这里给出的答案更快,因为它不需要正则表达式解析:stackoverflow.com/a/2316066/163227
【解决方案2】:

您可以使用正则表达式获取毫秒数,然后使用 Date 构造函数获取 Date 对象。一旦你有了你的日期对象,你就可以用它做任何你想做的事情。

var ms = parseInt("/Date(1268524800000)/".match(/\((\d+)\)/)[1]);
var d = new Date(ms);
alert(d.toString());

【讨论】:

    【解决方案3】:

    您可以eval() 它,也可以提取数字并将其传递给Date 构造函数。

    if (/^\/Date\((-?\d+)\)\/$/.test(val)) {
        var serial = parseInt(RegExp.$1);
        val = new Date(serial);
    }
    

    我看到日期表示为 /Date(1234567890000-0500)/,因此可能需要更强大的程序来处理 UTC 偏移量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2023-02-03
      • 2018-05-05
      • 2017-10-30
      相关资源
      最近更新 更多