1

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

20131107T102103,00+01

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

4

2 回答 2

1

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

  • 这是紧凑的形式。在 Web 上,我们通常会看到扩展形式,在RFC 3339中也有描述。

  • 它在秒字段中使用逗号而不是小数。虽然 ISO 8601 规范允许使用任何一种方法,但大多数实现都使用小数点

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

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

互联网浏览器 11

IE 截图

谷歌浏览器 35

铬截图

火狐 30

火狐截图

那么,那该怎么办呢?您可以编写一堆代码来提取字符串的所有单独部分并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 也不能识别只有两位数的偏移量。

于 2014-06-18T21:33:53.823 回答
-1

date_default_timezone_set('America/New_York');

$d1=新日期时间('20131107T102103,00+01');

$date = DATE_FORMAT($d1,'Ymd H:i:s');

于 2014-06-18T09:38:46.073 回答