我想格式化保持原始日期/时间的日期/时间。
我的问题是如果我使用这个jquery代码:
var time = $.formatDateTime('M d hh:ii', new Date(2013-12-13T14:00:00Z));
结果为Dec 13 15:00 UTC
。
有什么建议吗?
答案 0 :(得分:1)
时间字符串上的Z
明确表示日期/时间是UTC。 (但是关于JavaScript的奇怪之处在于即使看起来像ISO-8601字符串,如果Z
不存在,那么仍然是UTC而ISO- 8601说这应该是当地时间。)
奇怪的是,JavaScript中没有基于字符串的机制,在规范中用于在本地时间解析指定的日期/时间字符串格式。两种方法,一种是按照规范,另一种不是,但我从未见过没有这样做的浏览器:
自己解析字符串。这是使用指定的new Date(year, month, day, hour, minute, second)
构造函数:
var str = "2013-12-13T14:00:00Z";
var parts = str.replace(/Z$/, '').split(/[-T:]/);
var dt = new Date(
parseInt(parts[0], 10), // Year
parseInt(parts[1], 10) - 1, // Month (0 = Jan)
parseInt(parts[2], 10), // Day
parseInt(parts[3], 10), // Hour
parseInt(parts[4], 10), // Minute
parseInt(parts[5], 10) // Second
);
var time = $.formatDateTime('M d hh:ii', dt);
依赖于未指定但非常常见的行为:但是,我见过的每个浏览器都会解析yyyy/mm/dd hh:mm:ss
(使用斜杠,而不是-
)作为当地时间。
所以:
var str = "2013-12-13T14:00:00Z";
str = str.replace(/-/g, '/').replace(/Z$/, '').replace(/T/, ' ');
var time = $.formatDateTime('M d hh:ii', new Date(str));
同样,这不是指定的行为,但我从未见过没有这样做的浏览器。