我想格式化一个日期/时间,以保持原始日期/时间。
我的问题是,如果我使用这个jquery代码:
var time = $.formatDateTime('M d hh:ii', new Date(2013-12-13T14:00:00Z));
结果是Dec 13 15:00 UTC
。
有什么建议吗?
时间字符串上的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));
同样,这并不是特定的行为,但我从未见过浏览器不这样做