Javascript 获取特定时区的时间
我正在使用JavaScriptJavascript 获取特定时区的时间,javascript,date,time,timezone,Javascript,Date,Time,Timezone,我正在使用JavaScriptDate类&试图使用getDate()方法获取当前日期。但很明显,这是加载系统的日期和时间。我正在运行来自印度的代码,但我想使用相同的方法获取英国的日期和时间。如何做到这一点?客户端的简短回答:不,您必须从服务器端获取。您可以使用和相关的getUTC…()方法访问基于UTC时间的时间,然后进行转换 如果愿意,您可以使用,它返回自Unix纪元以来的秒数(以UTC为单位),并使用它,但它可能会涉及更多。使用.getTimezoneOffset()方法应该可以。这将得到您
Date
类&试图使用getDate()
方法获取当前日期。但很明显,这是加载系统的日期和时间。我正在运行来自印度的代码,但我想使用相同的方法获取英国的日期和时间。如何做到这一点?客户端的简短回答:不,您必须从服务器端获取。您可以使用和相关的getUTC…()
方法访问基于UTC时间的时间,然后进行转换
如果愿意,您可以使用,它返回自Unix纪元以来的秒数(以UTC为单位),并使用它,但它可能会涉及更多。使用
.getTimezoneOffset()
方法应该可以。这将得到您所在时区和格林尼治标准时间之间的时间。然后您可以根据需要计算任何时间。如果您有正确的日期和时间非常重要;最好在服务器上有一个返回时间的服务(当然,您的服务器是在UTC中运行的)。然后,您可以在客户端上创建一个新的日期,并比较这些值,如有必要,还可以使用与服务器时间的偏移量调整所有日期
为什么要这样做?我收到了一些很难复制的错误报告,因为我在服务器日志中找不到错误消息,直到我注意到错误报告在我收到它两天后才被邮寄出去。当发送UTC时间戳时,您可能会相信浏览器能够正确处理时区转换,但您显然不能相信用户能够正确设置系统时钟。(如果用户的时区设置也不正确,则实际上没有任何解决方案;除了以“本地”时间打印当前服务器时间)
在你太激动之前,这是2011年写的
如果这些天我要这么做,我会用。这里有一个链接,让您了解什么类型的
原来的答案现在(非常)过时了
Date.getTimezoneOffset()
getTimezoneOffset()方法返回格林威治标准时间(GMT)和本地时间之间的时间差,单位为分钟
例如,如果您的时区是GMT+2,则将返回-120
注意:此方法始终与日期对象结合使用
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偏移量,则可以通过以下函数传递它并获取时间:
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'));
摘自:您可以使用
let选项={
时区:“欧洲/伦敦”,
年份:'数字',
月份:'数字',
日期:'数字',
小时:'数字',
分钟:'数字',
第二个:“数字”,
},
格式化程序=新的Intl.DateTimeFormat([],选项);
log(formatter.format(newdate())代码>最好的方法是使用getLocaleString,如下所示:
创建日期对象:
date = new Date(0)
如果您在柏林,则应将其转换为以下字符串:
1970年1月1日星期四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’
这是获得成功的正确方法##
你错了。实际上,在服务器上更难,因为客户机既知道它所在的时区,也知道它所在的时间。服务器只有这个等式的一半。这似乎是OP实际问题的唯一答案。OP需要英国时间,无论客户位于何处。您可以获得UTC时间,它是英国的时区,但无法轻松确定它是否为DST。UTC不是英国的时区。这是一个常见的误解。UTC没有时区,是标准的。UK在冬季与UTC相同,在夏季为UTC+1。英国的时区要么是英国标准时间,要么是英国夏季时间(两者都缩写为BST…只是为了增加混淆!)您的utc
出了问题d.getTime
已以UTC毫秒为单位。但是,您需要使用.toutString()
而不是toLocaleString()
!请记住,位置的偏移量可能会更改(夏令时/英国夏令时)。您实际上需要减去getTimezoneOffset输出,而不是将其相加-该偏移量用于从本地时间到UTC,而不是相反。是否可以更改格式?例如,我只需要以小时、分钟、秒和AM/PM为单位的时间,这不是一个好答案。如果你硬编码一个偏移量,如果它有夏令时,你将在半年内被关闭。这个线程与更完整的线程是一个可怜的表亲:它有一个更好的答案。执行摘要。。。use@BrettHannah执行摘要将用作时区js支持DST;-)这在Chrome中有效,但在Firefox中不起作用。回答正确,它被称为国际API,是内置的,在大多数较新的浏览器中,您应该首先检查它是否存在。。当然…-参考:这在Safari中仍然不起作用。这非常有效。以下是浏览器支持列表:适用于Google Sheets应用程序脚本。旁注:Date.prototype.toLocaleString
仅适用于IE11+、Firefox 29+、Safari 11+等。请参阅本文。IANA时区名称仅适用于chrome和firefox。首先,您应该使用“en US”,因为它是Node<13中唯一受支持的区域设置(即此时100%的生产节点使用),但是你也需要考虑分钟,因为一些时区有半小时的偏移量;这个线程中的所有建议方法都不考虑白天光节省(应用它),所以最好使用矩时区库来简化生活。据推测,OP是从时区字符串开始工作的,尽管他没有明确说明这一点。OP需要使用Intl API,或者像Luxon或Moment这样的库。@Adamlegett一个简单的谷歌搜索几乎任何地点的时间都有UTC+/-#的专有结果,因此假设OP不能成功是有点不公平的
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());
}