如何将这个日期格式转换为:/Date(1268524800000)/?

4

可能是重复问题:
如何格式化JSON日期?

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


它的格式是什么?它是一个时间戳吗?如果网络服务有文档,它应该在里面。 - Pekka
5
与此问题相同。 - Nathan
1
好吧,这种格式可以说不是立刻能被认出来的。我觉得这么多踩有点过分。(但是+1@Nathan找到了一个很好的重复问题) - Pekka
网络服务帮助文档显示该类型为“type="xs:dateTime"”。 - TruMan1
它似乎是自1970年01月01日00:00:00 UTC以来的毫秒数; 所代表的日期是Sun 2010-03-14 00:00:00 UTC。 (这并没有回答如何转换它的问题,但如果您使用的是JavaScript之外的某种语言,则提供了如何执行此操作的线索。)当然,将其转换为人类可读格式的一种方法是训练自己阅读该格式。 8-)} - Keith Thompson
3个回答

11

试试这个:

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

示例代码:http://jsfiddle.net/dS2hd/


如果这个数字是负数呢? - gilly3
它不应该是因为它确实代表了系统中的日期。 - TruMan1
@TruMan1 - 在JavaScript中,1969年之前的任何日期都具有负的序列号。 - gilly3
之前不知道有这个反向引用 @gilly3:/(\-?\d+)/.test(str) ? new Date(+RegExp.$1) : null; - draeton
1
这里给出的答案更快,因为它不需要正则表达式解析:https://dev59.com/y3VC5IYBdhLWcg3wtzgQ#2316066 - Roy Tinker

1
你可以使用正则表达式获取毫秒数,然后使用 Date 构造函数获取一个日期对象。一旦你有了日期对象,你就可以随心所欲地处理它。
var ms = parseInt("/Date(1268524800000)/".match(/\((\d+)\)/)[1]);
var d = new Date(ms);
alert(d.toString());

0

你可以使用eval()函数,或者提取数字并将其传递给Date构造函数。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接