Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取特定时区的时间_Javascript_Date_Time_Timezone - Fatal编程技术网

Javascript 获取特定时区的时间

Javascript 获取特定时区的时间,javascript,date,time,timezone,Javascript,Date,Time,Timezone,我正在使用JavaScriptDate类&试图使用getDate()方法获取当前日期。但很明显,这是加载系统的日期和时间。我正在运行来自印度的代码,但我想使用相同的方法获取英国的日期和时间。如何做到这一点?客户端的简短回答:不,您必须从服务器端获取。您可以使用和相关的getUTC…()方法访问基于UTC时间的时间,然后进行转换 如果愿意,您可以使用,它返回自Unix纪元以来的秒数(以UTC为单位),并使用它,但它可能会涉及更多。使用.getTimezoneOffset()方法应该可以。这将得到您

我正在使用JavaScript
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());
        }