我进行了 API 调用并获得了响应。响应具有这样的日期时间值
20131107T102103,00+01
我猜这是 ISO 日期格式。我无法使用 javascript 将其格式化为人类可读的格式。
我进行了 API 调用并获得了响应。响应具有这样的日期时间值
20131107T102103,00+01
我猜这是 ISO 日期格式。我无法使用 javascript 将其格式化为人类可读的格式。
这确实是ISO 8601,但它并不是最常见的形式。
这是紧凑的形式。在 Web 上,我们通常会看到扩展形式,在RFC 3339中也有描述。
它在秒字段中使用逗号而不是小数。虽然 ISO 8601 规范允许使用任何一种方法,但大多数实现都使用小数点。
虽然 ISO 8601 允许偏移量 ( +01
) 的缩写形式,但通常以紧凑形式表示为+0100
,或以扩展形式表示为+01:00
。
尽管如此,该值符合 ISO 8601 标准,因此大多数较新的浏览器应该可以解析它。但事实并非如此。
互联网浏览器 11
谷歌浏览器 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 也不能识别只有两位数的偏移量。
date_default_timezone_set('America/New_York');
$d1=新日期时间('20131107T102103,00+01');
$date = DATE_FORMAT($d1,'Ymd H:i:s');