是否可以在不转换为UTC的情况下格式化日期

Is it possbile to format a date without a conversion to UTC?

本文关键字:UTC 情况下 格式化 日期 转换 是否      更新时间:2024-02-19

我想格式化一个日期/时间,以保持原始日期/时间。

我的问题是,如果我使用这个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中没有基于字符串的机制,这是规范中的,用于在本地时间解析指定的日期/时间字符串格式。有两种方法,一种是根据规范,另一种不是,但我从未见过浏览器不这样做:

  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));
    

    同样,这并不是特定的行为,但我从未见过浏览器不这样做