我从服务器得到一个这种格式的日期时间变量:6/29/2011 4:52:48 PM
它是 UTC 时间。我想使用 JavaScript 将其转换为当前用户的浏览器时区。
如何使用 JavaScript 或 jQuery 做到这一点?
我从服务器得到一个这种格式的日期时间变量:6/29/2011 4:52:48 PM
它是 UTC 时间。我想使用 JavaScript 将其转换为当前用户的浏览器时区。
如何使用 JavaScript 或 jQuery 做到这一点?
在将字符串转换为 javascript 中的日期之前,将“UTC”附加到字符串中:
var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
在我看来,服务器在一般情况下应该总是以标准化的 ISO 8601 格式返回日期时间。
更多信息在这里:
在这种情况下,服务器将返回'2011-06-29T16:52:48.000Z'
,这将直接提供给 JS 日期对象。
var utcDate = '2011-06-29T16:52:48.000Z'; // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);
该localDate
会在正确的本地时间这在我的情况下,将在两个小时后(DK时间)。
您真的不必进行所有这些只会使事情复杂化的解析,只要您与服务器期望的格式一致即可。
这是一个通用的解决方案:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000);
var offset = date.getTimezoneOffset() / 60;
var hours = date.getHours();
newDate.setHours(hours - offset);
return newDate;
}
用法:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
根据客户端本地设置显示日期:
date.toLocaleString();
对我来说,上述解决方案不起作用。
使用 IE 将 UTC 日期时间转换为本地是有点棘手的。对我来说,来自 Web API 的日期时间是'2018-02-15T05:37:26.007'
,我想根据本地时区进行转换,所以我在 JavaScript 中使用了以下代码。
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
您应该获得客户端的 (UTC) 偏移量(以分钟为单位):
var offset = new Date().getTimezoneOffset();
然后对您从服务器获得的时间进行相应的加法或减法。
希望这可以帮助。