获取特定时区的时间

asl*_*tor 57 javascript time timezone date

我正在使用JavaScript Date类并尝试使用getDate()方法获取当前日期.但显然它是加载系统的日期和时间.我正在运行来自印度的代码,但我希望使用相同的方法获取英国的日期和时间.我怎样才能做到这一点 ?

Sud*_*oti 53

如果您知道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'));
Run Code Online (Sandbox Code Playgroud)

取自:将当地时间转换为另一个

  • 请记住,某个位置的偏移量可能会发生变化(夏令时/英国夏令时). (33认同)
  • 你的'utc`是错的.`d.getTime`*已经是UTC毫秒.然而,代替`toLocaleString()`,你需要使用`.toUTCString()`! (13认同)
  • 这不是一个好的答案.如果你在一个偏移量中进行硬编码,如果它有夏令时,你将会在大约一半的时间内完成. (9认同)
  • 您实际上需要减去 getTimezoneOffset 输出而不是添加它 - 该偏移量用于从本地时间到 UTC,而不是相反。 (3认同)

tra*_*r09 38

你可以用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())
Run Code Online (Sandbox Code Playgroud)

或者,如果您只格式化一次而不是批量使用Date.prototype.toLocaleDateString().

(new Date()).toLocaleString([], options)
Run Code Online (Sandbox Code Playgroud)

不幸的是浏览器要求了解比UTC其他时区,所以try这些块,并计算出在情况下,它失败的替代,例如取时区从服务器偏移.

  • 效果很好。以下是浏览器支持的列表:https://caniuse.com/#search=Intl (2认同)

Chr*_*ris 21

执行此操作的最佳方法是使用getLocaleString,如下所示:

创建日期对象:

date = new Date(0)
Run Code Online (Sandbox Code Playgroud)

如果你在柏林,这应该转换为这个字符串:

Thu Jan 01 1970 01:00:00 GMT + 0100(CET)

在雅典获取时间:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Europe/Athens' })
Run Code Online (Sandbox Code Playgroud)

'02'

在上海获取时间:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Asia/Shanghai' })
Run Code Online (Sandbox Code Playgroud)

'08'

  • 旁注:`Date.prototype.toLocaleString` 仅适用于 IE11+、Firefox 29+、Safari 11+ 等。参见 [this](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/ Global_Objects/Date/toLocaleDateString) (2认同)

Joy*_*ury 9

这是获得##的正确方法

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());
        }
Run Code Online (Sandbox Code Playgroud)

  • 此线程中的所有建议方法都不考虑日光节省(适用的地方),因此最好使用时刻时区库来简化生活. (3认同)
  • Downvoting,因为答案要求OP知道偏移量.据推测,OP正在使用时区字符串,尽管他没有明确说明这一点.OP需要使用Intl API或Luxon或Moment等库. (2认同)

kev*_*nji 5

您可以使用getUTCDate()和相关getUTC...()方法根据UTC时间访问时间,然后进行转换.

如果你愿意,你可以使用valueOf(),它返回自Unix时代以来以UTC为单位的秒数,并使用它,但它可能会更加复杂.