格式化ISO日期

时间:2014-06-18 09:32:16

标签: javascript date datetime isodate

我正在进行API调用并获得响应。 响应具有像这样的日期时间值

20131107T102103,00+01

我猜这是ISO日期格式。我无法使用javascript将其格式化为人类可读的格式。

2 个答案:

答案 0 :(得分:1)

这确实是ISO 8601,但它并不是最常见的形式。

  • 这是紧凑的形式。在网络上,我们通常会看到扩展表单,该表单也在RFC 3339中进行了描述。

  • 它在秒字段中使用逗号而不是小数。虽然ISO 8601规范允许任何一种,most implementations use a decimal point

  • 虽然ISO 8601允许缩短形式的偏移量(+01),但通常以紧凑形式表示为+0100,或者以扩展形式表示为+01:00 }。

尽管如此,该值符合ISO 8601标准,因此大多数较新的浏览器可解析。但事实并非如此。

Internet Explorer 11

IE Screenshot

Google Chrome 35

Chrome Screenshot

Firefox 30

FireFox Screenshot

那么,该怎么做呢?您可以编写一堆代码来提取字符串的所有单独部分并自己构建一个Date对象,但这样做太多了。只需使用moment.js即可。这是用于在JavaScript中解析和格式化日期和时间的主要库之一,它适用于所有浏览器。

// parse it to a moment object first
var s = "20131107T102103,00+01";
var m = moment(s + "00","YYYYMMDD[T]HHmmss[,]SSZZ");

// then you can output however you like
m.format("...whatever...")

// or perhaps you need a JS Date object
m.toDate()

请注意,我仍然需要在偏移量中添加两个额外的零。即使是moment.js也只能识别只有两位数的偏移量。

答案 1 :(得分:-1)

date_default_timezone_set( '美国/纽约');

$ d1 = new DateTime('20131107T102103,00 + 01');

$ date = DATE_FORMAT($ d1,'Y-m-d H:i:s');