从服务器中,我得到这种格式的日期时间变量:6/29/2011 4:52:48 PM
,它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。将UTC日期时间转换为当地日期时间
这是如何使用JavaScript或jQuery完成的?
从服务器中,我得到这种格式的日期时间变量:6/29/2011 4:52:48 PM
,它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。将UTC日期时间转换为当地日期时间
这是如何使用JavaScript或jQuery完成的?
追加 'UTC' 在字符串中的JavaScript将其转换为日期前:
var date = new Date('6/29/2011 4:52:48 PM UTC');
date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"
function localizeDateStr(date_to_convert_str){ var date_to_convert = new Date(date_to_convert_str); var local_date = new Date(); date_to_convert.setHours(date_to_convert.getHours()+ local_date.getTimezoneOffset()); return date_to_convert.toString(); } – matt
@matt offSet返回分钟数,而不是小时数,您需要除以60 – bladefist
@matt还注意有几个小时关闭的时区。并且当UTC和本地值都有getter和setter函数时,您不需要使用时区偏移 –
将这个功能在你的脑袋:
<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,""));
'本地化(“2011/6/29 4:52:48”);' 它不工作在FireFox中,因为我使用24小时格式 – BrainCoder
非常感谢。我一直在寻找最有效的方法来本地化UTC时间几小时。你先生是绅士和学者! – jiaoziren
感谢上帝,我撞上了这个答案,否则我会死的。 – niravpatel9898
对我来说,最简单的使用似乎
datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());
(我想的第一行可能是足够的,但有时区的开关状态中的小时馏分)
有没有人有任何问题?这对我来说似乎是最好的选择。我使用了一个UTC字符串,在其末尾有“(UTC)”,使用'new Date('date string')'将其设置为Date对象,然后添加了这两行,它似乎正在返回时间基于完全关闭服务器的UTC时间戳,并进行调整以使其与当地用户的时间相匹配。我不必担心奇怪的一小时时间分区......不知道它是否始终保持完美...... – tylerl
这是一种通用的解决方案:
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();
//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;
}
在夏令时发生了什么。 CET时区 – NovusMobile
请参阅我的回答@ http://stackoverflow.com/questions/6525538/convert-utc-date-time-to-local-date-time-using-javascript/31453408#31453408 – Hulvej
马特的答案是丢失的事实,夏令时可能是日期(),它需要转换的日期时间之间的不同 - 这里是我的解决方案:
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)
在角我用本的回答是这样的:
$scope.convert = function (thedate) {
var tempstr = thedate.toString();
var newstr = tempstr.toString().replace(/GMT.*/g, "");
newstr = newstr + " UTC";
return new Date(newstr);
};
编辑:角1.3。0添加日期进行过滤UTC的支持,我没有用它了,但它应该更容易,这里的格式是:
{{ date_expression | date : format : timezone}}
我回答这个问题,如果任何人想要的显示转换后的时间函数到特定的id元素并应用日期格式字符串yyyy-mm-dd 此处date1是字符串,id是要显示时间的元素的id。
function convertUTCDateToLocalDate(date1, ids)
{
var newDate = new Date();
var ary = date1.split(" ");
var ary2 = ary[0].split("-");
var ary1 = ary[1].split(":");
var month_short = Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
newDate.setUTCHours(parseInt(ary1[0]));
newDate.setUTCMinutes(ary1[1]);
newDate.setUTCSeconds(ary1[2]);
newDate.setUTCFullYear(ary2[0]);
newDate.setUTCMonth(ary2[1]);
newDate.setUTCDate(ary2[2]);
ids = document.getElementById(ids);
ids.innerHTML = " " + newDate.getDate() + "-" + month_short[newDate.getMonth() - 1] + "-" + newDate.getFullYear() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds();
}
我知道这个问题的答案已经被接受,但我来到这里谷歌的原因,我没有与接受的答案得到解决的灵感,所以我确实想如果有人只是需要分享。
基于@digitalbath答案,这里是一个小功能来获取UTC时间戳,并显示在一个给定的DOM元素的本地时间(使用jQuery的最后一部分):
https://jsfiddle.net/moriz/6ktb4sv8/1/
<div id="eventTimestamp" class="timeStamp">
</div>
<script type="text/javascript">
// Convert UTC timestamp to local time and display in specified DOM element
function convertAndDisplayUTCtime(date,hour,minutes,elementID) {
var eventDate = new Date(''+date+' '+hour+':'+minutes+':00 UTC');
eventDate.toString();
$('#'+elementID).html(eventDate);
}
convertAndDisplayUTCtime('06/03/2015',16,32,'eventTimestamp');
</script>
在我看来,服务器应该总是在一般情况下返回标准化的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
将是在正确的本地时间这在我的情况下,将在两个小时后(DK时间)。
你真的没有必要做所有这些解析只是复杂的东西,只要你符合什么格式期望从服务器。
如何获取iso格式日期?我以UTC格式获得日期,并在UTC末尾附加 – Deepika
@Colin,这是语言相关的。在C#中,您可以使用'.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
使用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 format。
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时区的偏移量。这是一个基于Adorjan Princ's回答一个简化的解决方案:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date);
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return newDate;
}
用法:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
为什么这会在2017年10月9日下调?请写评论以帮助我了解您的意见。 – huha
甲JSON日期字符串(连载于C#)看起来像“2015-10 -13T18:58:17" 。
在角(以下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' }}
如果你不使用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');
我写了一个可爱的小脚本,需要一个UTC时代和转换它的客户端系统时区和d/M返回它/ YH:我:S(如PHP日期函数)格式:
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;
};
尝试一些其他人张贴在这里没有良好的结果后,这似乎为工作我:
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());
}
function getUTC(str) {
var arr = str.split(/[- :]/);
var utc = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
utc.setTime(utc.getTime() - utc.getTimezoneOffset()*60*1000)
return utc;
}
对于其他人谁访问 - 使用此功能从UTC字符串获取本地日期对象,应该照顾DST,并将在IE,iPhone等上工作。
我们拆分字符串(因为JS日期解析在某些浏览器上不受支持) 我们从UTC获得差异并从中减去UTC时间,这给了我们当地时间。由于返回的偏移量是用DST计算的(纠正我,如果我错了),所以它会将这个时间设置回变量“utc”。最后返回日期对象。
这个工作对我来说:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
return newDate;
}
对我来说,上述解决方案没有奏效。
随着IE的UTC日期时间转换为本地是有点棘手。 对我而言,web API的日期时间为'2018-02-15T05:37:26.007'
,我想按照本地时区进行转换,所以我在JavaScript中使用了下面的代码。
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
代码示例:[http:// stackoverflow。COM /问题/ 3830418/IS-有-A-jQuery的插件到转换-UTC-日期时间到本地用户时区(http://stackoverflow.com/questions/3830418/is-there-a -jquery-plugin-to-convert-utc-datetimes-to-local-user-timezone) –
小心。这是一个奇怪的日期格式,所以一定要用你使用的任何解决方案来指定它。如果可能,请让服务器以ISO格式发送日期。 –