我正在进行API调用并获得响应。 响应具有像这样的日期时间值
20131107T102103,00+01
我猜这是ISO日期格式。我无法使用javascript将其格式化为人类可读的格式。
答案 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
Google Chrome 35
Firefox 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也只能识别只有两位数的偏移量。
答案 1 :(得分:-1)
date_default_timezone_set( '美国/纽约');
$ d1 = new DateTime('20131107T102103,00 + 01');
$ date = DATE_FORMAT($ d1,'Y-m-d H:i:s');