是否可以格式化日期而无需转换为UTC?

时间:2013-12-04 09:48:27

标签: javascript jquery utc

我想格式化保持原始日期/时间的日期/时间。

我的问题是如果我使用这个jquery代码:

var time = $.formatDateTime('M d hh:ii', new Date(2013-12-13T14:00:00Z));

结果为Dec 13 15:00 UTC

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

时间字符串上的Z明确表示日期/时间是UTC。 (但是关于JavaScript的奇怪之处在于即使看起来像ISO-8601字符串,如果Z不存在,那么仍然是UTC而ISO- 8601说这应该是当地时间。)

奇怪的是,JavaScript中没有基于字符串的机制,在规范用于在本地时间解析指定的日期/时间字符串格式。两种方法,一种是按照规范,另一种不是,但我从未见过没有这样做的浏览器:

  1. 自己解析字符串。这是使用指定的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);
    
  2. 依赖于未指定但非常常见的行为:但是,我见过的每个浏览器都会解析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));
    

    同样,这不是指定的行为,但我从未见过没有这样做的浏览器。