我知道如何获得时区偏移,但我需要的是检测“美国/纽约”之类内容的能力。JavaScript能做到吗,还是我只能根据偏移量来估计?


当前回答

在javascript中,Date.getTimezoneOffset()方法返回当前地区相对于UTC的时区偏移,单位为分钟。

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

时刻时区将是一个有用的工具。 http://momentjs.com/timezone/

在时区之间转换日期

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

其他回答

在javascript中,Date.getTimezoneOffset()方法返回当前地区相对于UTC的时区偏移,单位为分钟。

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

时刻时区将是一个有用的工具。 http://momentjs.com/timezone/

在时区之间转换日期

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

如果你已经在使用Moment.js,你可以猜出时区名称:

moment.tz.guess(); // eg. "America/New York"

要检测像“America/New York.”这样的内容,可以使用Luxon库中的新LocalZone()。

import { LocalZone } from 'luxon';

const zoneName = new LocalZone().name;

console.log(新日期()。toLocaleDateString(undefined, {day:'2-digit',timeZoneName: 'long'}).substring(4).match(/\b(\w)/g).join("))

用当前用户的语言表示结果的简短可能性:

console.log(新日期()。toLocaleDateString(未定义,{day:'2-digit',timeZoneName: 'long'}).substring(4));