我从服务器获取的日期时间变量格式为:6/29/2011 4:52:48 PM
,并且它是以UTC时间表示的。 我希望使用JavaScript将其转换为当前用户的浏览器时区。
请问如何使用JavaScript或jQuery实现?
我从服务器获取的日期时间变量格式为:6/29/2011 4:52:48 PM
,并且它是以UTC时间表示的。 我希望使用JavaScript将其转换为当前用户的浏览器时区。
请问如何使用JavaScript或jQuery实现?
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"
//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;
}
Matt的回答忽略了夏令时在Date()和需要转换的日期时间之间可能不同这一事实 - 这是我的解决方案:
function ConvertUTCTimeToLocalTime(UTCDateString)
{
var convertdLocalTime = new Date(UTCDateString);
var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;
convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset );
return convertdLocalTime;
}
在调试器中的结果:
UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
如果你不介意使用moment.js
,并且你的时间是以UTC为准,请使用以下代码:
moment.utc('6/29/2011 4:52:48 PM').toDate();
如果您的时间不是使用UTC而是其他已知时区,请使用以下方法:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY', 'fr').toDate();
如果你的时间已经是本地时间,那么请使用以下方法:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY');
datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());
我原以为第一行足够了,但有些时区的偏差是小数小时级别的。
new Date('date string')
,然后添加了这两行代码,它似乎返回了一个基于服务器UTC时间戳完全匹配用户本地时间的时间,并进行了调整。 我还必须担心怪异的小数小时时区...不确定它是否始终完美地符合要求... - tylerl这是我将UTC转换为本地时间的方法:
const dataDate = '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>UTC<p>
<p id="dataDate"></p>
<p>Local(GMT +7)<p>
<p id="myLocalDate"></p>
结果: 2020年9月15日 星期二 14:08:00 GMT+0700 (印度支那时间)。
JSON日期字符串(在C#中序列化)看起来像“2015-10-13T18:58:17”。
在Angular中(遵循Hulvej的方法),可以创建一个localdate
过滤器:
myFilters.filter('localdate', function () {
return function(input) {
var date = new Date(input + '.000Z');
return date;
};
})
{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
对我来说,这很有效。
if (typeof date === "number") {
time = new Date(date).toLocaleString();
} else if (typeof date === "string"){
time = new Date(`${date} UTC`).toLocaleString();
}
使用YYYY-MM-DD hh:mm:ss
格式:
var date = new Date('2011-06-29T16:52:48+00:00');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
如果要将日期从YYYY-MM-DD hh:mm:ss
格式转换,请确保您的日期遵循ISO 8601格式。
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
Complete date plus hours, minutes and seconds:
YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
Complete date plus hours, minutes, seconds and a decimal fraction of a second
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) where:
YYYY = four-digit year
MM = two-digit month (01=January, etc.)
DD = two-digit day of month (01 through 31)
hh = two digits of hour (00 through 23) (am/pm NOT allowed)
mm = two digits of minute (00 through 59)
ss = two digits of second (00 through 59)
s = one or more digits representing a decimal fraction of a second
TZD = time zone designator (Z or +hh:mm or -hh:mm)
需要注意的重要事项
T
分隔,使用空格在某些浏览器中不起作用。+hh:mm
设置时区,使用字符串表示时区(例如:'UTC')在许多浏览器中不起作用。 +hh:mm
表示与 UTC 时区的偏移量。@Adorojan
的答案几乎是正确的。但是添加偏移量是不正确的,因为如果浏览器日期超前于GMT或反之,则偏移值将为负数。
以下是我想出的解决方案,对我来说完美地运作:
// Input time in UTC
var inputInUtc = "6/29/2011 4:52:48";
var dateInUtc = new Date(Date.parse(inputInUtc+" UTC"));
//Print date in UTC time
document.write("Date in UTC : " + dateInUtc.toISOString()+"<br>");
var dateInLocalTz = convertUtcToLocalTz(dateInUtc);
//Print date in local time
document.write("Date in Local : " + dateInLocalTz.toISOString());
function convertUtcToLocalTz(dateInUtc) {
//Convert to local timezone
return new Date(dateInUtc.getTime() - dateInUtc.getTimezoneOffset()*60*1000);
}
var date = new Date('2020-11-06T01:30:00.000Z'); console.log(date.toLocaleDateString()); console.log(date.toLocaleString()); console.log(date.toLocaleTimeString());
- FXLima