Amr*_*rhy 301 javascript jquery timezone datetime utc
从服务器我得到这种格式的datetime变量:6/29/2011 4:52:48 PM
它是UTC时间.我想使用JavaScript将其转换为当前用户的浏览器时间.
如何使用JavaScript或jQuery完成此操作?
dig*_*ath 361
在将字符串转换为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)"
Run Code Online (Sandbox Code Playgroud)
Hul*_*vej 115
在我看来,服务器应始终在一般情况下返回标准化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);
Run Code Online (Sandbox Code Playgroud)
该localDate
会在正确的本地时间这在我的情况下,将在两个小时后(DK时间).
你真的不需要做所有这些只会使事情变得复杂的解析,只要你与服务器期望的格式一致即可.
Ado*_*ncz 93
这是一个通用的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
Run Code Online (Sandbox Code Playgroud)
根据客户端本地设置显示日期:
date.toLocaleString();
Run Code Online (Sandbox Code Playgroud)
Nob*_*ita 36
您应该获得客户端的(UTC)偏移量(以分钟为单位):
var offset = new Date().getTimezoneOffset();
Run Code Online (Sandbox Code Playgroud)
然后通过对应的添加或减少从服务器获得的时间.
希望这可以帮助.
Ben*_*ant 20
将此功能放在头脑中:
<script type="text/javascript">
function localize(t)
{
var d=new Date(t+" UTC");
document.write(d.toString());
}
</script>
Run Code Online (Sandbox Code Playgroud)
然后为页面正文中的每个日期生成以下内容:
<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>
Run Code Online (Sandbox Code Playgroud)
要删除GMT和时区,请更改以下行:
document.write(d.toString().replace(/GMT.*/g,""));
Run Code Online (Sandbox Code Playgroud)
小智 19
对我而言,上述解决方案无效.
使用IE,将UTC日期时间转换为本地有点棘手.对我来说,来自Web API的日期时间是'2018-02-15T05:37:26.007'
,我想按照本地时区进行转换,所以我在JavaScript中使用了以下代码.
var createdDateTime = new Date('2018-02-15T05:37:26.007' + 'Z');
Run Code Online (Sandbox Code Playgroud)
Mar*_*avi 16
如果你有
你可以在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
Run Code Online (Sandbox Code Playgroud)
您只需输入您的区域字符串而不是“en-US”(例如“fa-IR”)。
您还可以使用toLocaleTimeString
类似 { hour: '2-digit', 分钟: '2-digit' }的选项
myTime = new Date(myDateTime).toLocaleTimeString('en-US',{ hour: '2-digit', minute: '2-digit' });
// myTime is 09:30 PM
Run Code Online (Sandbox Code Playgroud)
有关toLocaleTimeString和toLocaleDateString的更多信息
Mol*_*ght 15
这对我有用:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
return newDate;
}
Run Code Online (Sandbox Code Playgroud)
Uni*_*nic 10
在尝试了其他几个没有好结果的人之后,这似乎对我有用:
convertUTCDateToLocalDate: function (date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
Run Code Online (Sandbox Code Playgroud)
从Local Date到UTC,这种方式正好相反:
convertLocalDatetoUTCDate: function(date){
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
Run Code Online (Sandbox Code Playgroud)
小智 9
//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;
}
Run Code Online (Sandbox Code Playgroud)
如果您不介意使用moment.js
并且您的时间是UTC,请使用以下内容:
moment.utc('6/29/2011 4:52:48 PM').toDate();
Run Code Online (Sandbox Code Playgroud)
如果您的时间不在utc中,而是您知道的任何其他语言环境,请使用以下内容:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY', 'fr').toDate();
Run Code Online (Sandbox Code Playgroud)
如果您的时间已经在当地,请使用以下内容:
moment('6/29/2011 4:52:48 PM', 'MM-DD-YYYY');
Run Code Online (Sandbox Code Playgroud)
Matt的答案是错过了Date()和它需要转换的日期时间之间的夏令时可能不同的事实 - 这是我的解决方案:
function ConvertUTCTimeToLocalTime(UTCDateString)
{
var convertdLocalTime = new Date(UTCDateString);
var hourOffset = convertdLocalTime.getTimezoneOffset() / 60;
convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset );
return convertdLocalTime;
}
Run Code Online (Sandbox Code Playgroud)
调试器中的结果:
UTCDateString: "2014-02-26T00:00:00"
convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)
Run Code Online (Sandbox Code Playgroud)
这是一个基于Adorjan Princ答案的简化解决方案:
function convertUTCDateToLocalDate(date) {
var newDate = new Date(date);
newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return newDate;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var date = convertUTCDateToLocalDate(new Date(date_string_you_received));
Run Code Online (Sandbox Code Playgroud)
在末尾添加时区,在本例中为“ UTC”:
theDate = new Date( Date.parse('6/29/2011 4:52:48 PM UTC'));
Run Code Online (Sandbox Code Playgroud)
之后,使用toLocale()*函数族以正确的语言环境显示日期
theDate.toLocaleString(); // "6/29/2011, 9:52:48 AM"
theDate.toLocaleTimeString(); // "9:52:48 AM"
theDate.toLocaleDateString(); // "6/29/2011"
Run Code Online (Sandbox Code Playgroud)
这就是我将 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;
Run Code Online (Sandbox Code Playgroud)
<p>UTC<p>
<p id="dataDate"></p>
<p>Local(GMT +7)<p>
<p id="myLocalDate"></p>
Run Code Online (Sandbox Code Playgroud)
结果:2020 年 9 月 15 日星期二 14:08:00 GMT+0700(印度支那时间)。
对我来说,最简单的方法似乎是使用
datetime.setUTCHours(datetime.getHours());
datetime.setUTCMinutes(datetime.getMinutes());
Run Code Online (Sandbox Code Playgroud)
(我以为第一行可能就够了,但是有些时区会在几分之一小时内消失)
使用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)"
Run Code Online (Sandbox Code Playgroud)
要从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)
Run Code Online (Sandbox Code Playgroud)
需要注意的重要事项
T
,空格在某些浏览器中不起作用+hh:mm
,使用字符串作为时区(例如:'UTC')在许多浏览器中不起作用。+hh:mm
表示与 UTC 时区的偏移量。小智 5
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;
};
})
Run Code Online (Sandbox Code Playgroud)
然后,显示本地时间,如:
{{order.createDate | localdate | date : 'MMM d, y h:mm a' }}
Run Code Online (Sandbox Code Playgroud)
对我来说,这很有效
if (typeof date === "number") {
time = new Date(date).toLocaleString();
} else if (typeof date === "string"){
time = new Date(`${date} UTC`).toLocaleString();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
553914 次 |
最近记录: |