我从服务器获取的日期时间变量格式为: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中的Date对象。
var utcDate = '2011-06-29T16:52:48.000Z'; // ISO-8601 formatted date returned from server
var localDate = new Date(utcDate);
localDate
将会是本地时间,对于我的情况来说会比标准时间晚两个小时(丹麦时间)。
你真的不需要进行所有这些解析,因为只要与服务器预期的格式保持一致就可以了,这只会让事情更加复杂。
.toString("o")
对DateTime
对象进行格式化,返回一个ISO-8601格式的字符串,就像上面展示的那样。https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx
在JavaScript中,可以使用new Date().toISOString()
实现相同的效果。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString - Hulvej这是一个通用解决方案:
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();
Date
对象的时区。数据错误将出现在值接近本地时区的DST转换处。2. Date
对象在内部已经是UTC。只有当您在其上使用非UTC函数时,它才会转换为本地时区。因此,不存在UTC Date对象与Local Date对象之分。 - Matt Johnson-Pint对我来说,以上的解决方案都没有起作用。
使用IE将UTC日期时间转换为本地时间有点棘手。
我的Web API返回的日期时间是'2018-02-15T05:37:26.007'
,我想按照本地时区进行转换,所以我在JavaScript中使用了以下代码。
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
这对我有用:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
return newDate;
}
你应该获取客户端的(UTC)偏移量(以分钟为单位):
var offset = new Date().getTimezoneOffset();
然后根据服务器返回的时间进行相应的加减操作。
希望这可以帮到您。
<script type="text/javascript">
function localize(t)
{
var d=new Date(t+" UTC");
document.write(d.toString());
}
</script>
<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>
要移除 GMT 和时区信息,请更改以下行:
document.write(d.toString().replace(/GMT.*/g,""));
这是基于Adorjan Princ的答案的简化解决方案:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date);
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return newDate;
}
或者更简单的方法(尽管它会改变原始日期):
function convertUTCDateToLocalDate(date) {
date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return date;
}
使用方法:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
如果你有"2021-12-28T18:00:45.959Z"这样的时间格式,你可以在js中使用以下代码:
// myDateTime is 2021-12-28T18:00:45.959Z
myDate = new Date(myDateTime).toLocaleDateString('en-US');
// myDate is 12/28/2021
myTime = new Date(myDateTime).toLocaleTimeString('en-US');
// myTime is 9:30:45 PM
只需将您的区域字符串放入 "en-US" 的位置即可 (例如 "fa-IR")。
您还可以使用 toLocaleTimeString
的选项,例如 { hour: '2-digit', minute: '2-digit' }。
myTime = new Date(myDateTime).toLocaleTimeString('en-US',{ hour: '2-digit', minute: '2-digit' });
// myTime is 09:30 PM
toLocaleTimeString 和 toLocaleDateString 有更多信息。
尝试了其他几种方法效果不佳后,这个方法对我有效:
convertUTCDateToLocalDate: function (date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
这也适用于相反的情况,从本地日期转换为UTC:
convertLocalDatetoUTCDate: function(date){
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
new Date(+date + date.getTimezoneOffset() * 6e4)
可以减少代码量。;-) - RobG
var date = new Date('2020-11-06T01:30:00.000Z'); console.log(date.toLocaleDateString()); console.log(date.toLocaleString()); console.log(date.toLocaleTimeString());
- FXLima