获取特定时区的时间[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取特定时区的时间[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我正在使用javascript Date
类并尝试使用getDate()
方法获取当前日期。但显然它是加载系统的日期和时间。我正在运行来自印度的代码,但我希望使用相同的方法获取英国的日期和时间。我怎样才能做到这一点 ?
如果您知道UTC偏移量,那么您可以使用以下函数传递它并获得时间:
function calcTime(city, offset) {
// create Date object for current location
var d = new Date();
// convert to msec
// subtract local time zone offset
// get UTC time in msec
var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time for city"+ city +" is "+ nd.toLocaleString();
}
alert(calcTime('Bombay', '+5.5'));
取自:Convert Local Time to Another
你可以使用Intl.DateTimeFormat
。
var options = {
timeZone: 'Europe/London',
year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric', second: 'numeric',
},
formatter = new Intl.DateTimeFormat([], options)
formatter.format(new Date())
或者,如果您只格式化一次而不是批量使用Date.prototype.toLocaleDateString()
。
(new Date()).toLocaleString([], options)
不幸的是,浏览器不需要理解UTC以外的时区,所以try
这些块会在失败的情况下找出替代方案,例如从服务器获取时区偏移量。
执行此操作的最佳方法是使用getLocaleString,如下所示:
创建日期对象:
date = new Date(0)
如果你在柏林,这应该转换为这个字符串:
Thu Jan 01 1970 01:00:00 GMT + 0100(CET)
在雅典获取时间:
date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Europe/Athens' })
'02'
在上海获取时间:
date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Asia/Shanghai' })
'08'
这是获得##的正确方法
function getTime(offset)
{
var d = new Date();
localTime = d.getTime();
localOffset = d.getTimezoneOffset() * 60000;
// obtain UTC time in msec
utc = localTime + localOffset;
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
//nd = 3600000 + nd;
utc = new Date(utc);
// return time as a string
$("#local").html(nd.toLocaleString());
$("#utc").html(utc.toLocaleString());
}
您可以使用getUTCDate()
和相关的getUTC...()
方法来访问基于UTC时间的时间,然后进行转换。
如果你愿意,你可以使用valueOf()
,它返回自Unix时代以来UTC的秒数,并使用它,但它可能会涉及更多。
Date.getTimezoneOffset()
getTimezoneOffset()方法返回格林威治标准时间(GMT)与本地时间之间的时差,以分钟为单位。
例如,如果您的时区是GMT + 2,则返回-120。
注意:此方法始终与Date对象一起使用。
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
//output:The local time zone is: GMT 11
如果您拥有正确的日期和时间非常重要;最好在您的服务器上(当然您以UTC运行)提供服务,返回时间。然后,您可以在客户端上创建新日期并比较这些值,并在必要时使用服务器时间的偏移量调整所有日期。
为什么这样?我有很难再现的错误报告,因为我在服务器日志中找不到错误消息,直到我发现错误报告在收到它后两天邮寄。您可以信任浏览器在发送UTC时间戳时正确处理时区转换,但您显然无法信任用户正确设置系统时钟。 (如果用户的时区设置错误,则实际上没有任何解决方案;除了在“本地”时间打印当前服务器时间外
来自客户端的简短回答:不,你必须从服务器端获取它。
.getTimezoneOffset()
方法应该有效。这将获得您的时区和GMT之间的时间。然后你可以计算你想要的任何东西。
以上是关于获取特定时区的时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章