如何获得使用JavaScript的特定时区的时间?
我正在使用JavaScriptdate类&试图获取当前date使用getDate()方法。 但显然它是加载系统date和时间。 我正在运行来自印度的代码,但我想用同样的方法得到英国的date和时间。 我怎样才能做到这一点 ?
如果你知道UTC偏移量,那么你可以通过它,并获得使用以下function的时间:
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'));
你可以使用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
这些代码块,并在失败的情况下找出替代scheme,例如从服务器获取时区偏移量。
最好的方法是使用getLocaleString,就像这样:
创build一个date对象:
date = new Date(0)
如果你在柏林,这应该转换为这个string:
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()
,它返回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
如果你有正确的date和时间真的很重要, 最好在你的服务器上有一个服务(你当然要用UTC来运行),以便返回时间。 然后,您可以在客户端上创build一个新date,并比较这些值,如有必要,可以使用服务器时间的偏移量来调整所有date。
为什么这样做? 我有错误报告,很难重现,因为我找不到服务器日志中的错误消息,直到我注意到错误报告邮寄两天后,我收到它。 您可能可以信任浏览器在发送UTC时间戳时正确处理时区转换,但您显然不能相信用户正确设置了系统时钟。 (如果用户的时区设置不正确,除了在当地时间打印当前服务器时间外,没有任何解决scheme)
.getTimezoneOffset()
方法应该工作。 这将得到您的时区和GMT之间的时间。 然后,你可以计算任何你想要的。