从服务器我得到一个datetime变量的格式:6/29/2011 4:52:48 PM,它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时区。

如何使用JavaScript或jQuery来做到这一点?


当前回答

在最后添加时区,在本例中是'UTC':

theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));

之后,使用toLocale()*函数族以正确的地区显示日期

theDate.toLocaleString();  // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString();  // "9:52:48 AM"
theDate.toLocaleDateString();  // "6/29/2011"

其他回答

我写了一个漂亮的小脚本,它采用UTC纪元并将其转换为客户端系统时区,并以d/m/Y H: I:s(类似于PHP date函数)格式返回:

getTimezoneDate = function ( e ) {

    function p(s) { return (s < 10) ? '0' + s : s; }        

    var t = new Date(0);
    t.setUTCSeconds(e);

    var d = p(t.getDate()), 
        m = p(t.getMonth()+1), 
        Y = p(t.getFullYear()),
        H = p(t.getHours()), 
        i = p(t.getMinutes()), 
        s = p(t.getSeconds());

    d =  [d, m, Y].join('/') + ' ' + [H, i, s].join(':');

    return d;

};

将此用于UTC和本地时间转换,反之亦然。

//Covert datetime by GMT offset 
//If toUTC is true then return UTC time other wise return local time
function convertLocalDateToUTCDate(date, toUTC) {
    date = new Date(date);
    //Local time converted to UTC
    console.log("Time: " + date);
    var localOffset = date.getTimezoneOffset() * 60000;
    var localTime = date.getTime();
    if (toUTC) {
        date = localTime + localOffset;
    } else {
        date = localTime - localOffset;
    }
    date = new Date(date);
    console.log("Converted time: " + date);
    return date;
}

这对我来说很管用

选项1:如果日期格式是"yyyy-mm-dd"或"yyyy-mm-dd H:n:s",例如:"2021-12-16 06:07:40"

使用这种格式,它不知道它是本地格式还是UTC时间。既然我们知道日期是UTC,我们必须确保JS知道它是UTC。所以我们必须将日期设置为UTC。

        function setDateAsUTC(d) {
            let date = new Date(d);
            return new Date(
                Date.UTC(
                    date.getFullYear(),
                    date.getMonth(),
                    date.getDate(),
                    date.getHours(),
                    date.getMinutes(),
                    date.getSeconds()
                )
            );
        }

然后使用它


let d = "2021-12-16 06:07:40";
setDateAsUTC(d).toLocaleString();

// output: 12/16/2021, 6:07:40 AM

选项2:UTC日期格式为ISO-8601。大多数服务器的时间戳格式是ISO-8601 ex: '2011-06-29T16:52:48.000Z'。这样我们就可以把它传递给date函数和toLocaleString()函数。

let newDate = "2011-06-29T16:52:48.000Z"
new Date(newDate).toLocaleString();
//output: 6/29/2011, 4:52:48 PM

在最后添加时区,在本例中是'UTC':

theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));

之后,使用toLocale()*函数族以正确的地区显示日期

theDate.toLocaleString();  // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString();  // "9:52:48 AM"
theDate.toLocaleDateString();  // "6/29/2011"

对我来说,最简单的方法似乎很有用

datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());

(我认为第一行可以足够了,但有时区,在几个小时的分数)