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

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


当前回答

在我的例子中,我必须在几秒钟内找出日期的差异。日期是UTC日期字符串,因此我将其转换为本地日期对象。这就是我所做的:

let utc1 = new Date();
let utc2 = null;
const dateForCompare = new Date(valueFromServer);
dateForCompare.setTime(dateForCompare.getTime() - dateForCompare.getTimezoneOffset() * 
 60000);
utc2 = dateForCompare;

const seconds = Math.floor(utc1 - utc2) / 1000;

其他回答

这对我来说很管用:

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
    return newDate;   
}

这是我正在做的将UTC转换为本地时间:

常量数据日期 = '2020-09-15 07:08:08' const utcDate = new Date(dataDate); const myLocalDate = new Date(Date.UTC( utcDate.getFullYear() utcDate.getMonth(), utcDate.getDate(), utcDate.getHours(), utcDate.getMinutes() )); document.getElementById(“dataDate”).innerHTML = dataDate; document.getElementById(“myLocalDate”).innerHTML = myLocalDate; <p>世界标准时间<p> <p id=“dataDate”></p> <p>本地(格林威治标准时间 +7)<p> <p id=“myLocalDate”></p>

结果:2020年9月15日星期二14:08:00 GMT+0700(印度支那时间)

你应该得到(UTC)偏移量(分钟)的客户端:

var offset = new Date().getTimezoneOffset();

然后对从服务器得到的时间做相应的加减运算。

希望这能有所帮助。

在最后添加时区,在本例中是'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"

在Angular中,我这样使用Ben的回答:

$scope.convert = function (thedate) {
    var tempstr = thedate.toString();
    var newstr = tempstr.toString().replace(/GMT.*/g, "");
    newstr = newstr + " UTC";
    return new Date(newstr);
};

编辑:Angular 1.3.0添加了UTC日期过滤器,我还没有使用过,但它应该更简单,格式如下:

{{ date_expression | date : format : timezone}}

Angular 1.4.3 Date API