获取时区的名称



可以使用jQuery获取客户端时区的名称吗?

示例:太平洋标准时间、格林威治标准时间,如下所示:https://en.wikipedia.org/wiki/List_of_time_zones_by_country

时区列表

是否可以使用 jQuery 获取客户端的时区名称?

不。 jQuery只有一个日期/时间函数,即$.now()

如果你指的是JavaScript,答案仍然是否定的。 您只能从date.getTimezoneOffset() 获得时区偏移量。 您无法获取时区 - 至少不是在所有浏览器中。 请参阅时区标签维基的部分,标题为:"Time Zone != Offset"

您可以使用 jsTimeZoneDetect 库猜测时区,但这只是一个猜测。 它可能准确,也可能不准确。

您现在还可以使用时刻.js和时刻时区附加功能。 它现在支持使用 moment.tz.guess() 进行时区猜测。

如果你能保证你的用户在一个完全支持 ECMAScript 国际化 API 的环境中运行,你可以像这样获取用户的时区:

Intl.DateTimeFormat().resolvedOptions().timeZone

您可以在"DateTimeFormat - resolvedOptions().timezone defaults to the host environment"下查看兼容性表,以确定这将在哪些环境中工作。

老实说,最好的办法就是给你的用户一个屏幕,让他们可以选择时区。 您可以使用下拉列表,也可以使用基于地图的时区选取器 - 如下所示。 您可以使用 jsTimeZoneDetect 作为默认值,但您的用户应该能够更改它。

此外,所有这些都将为您提供IANA时区标识符,例如 America/Los_Angeles 。 但是您给出的示例似乎是 Windows 时区 ID(用于 .net 中的TimeZoneInfo(。 您应该阅读时区标签维基,然后阅读这个问题:如何在Windows和IANA时区之间进行翻译?

new Date() 的输出是Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time),你能使用它吗?如果您不需要正式名称,则可以使用括号之间的内容

function getTimeZone() {
    return /((.*))/.exec(new Date().toString())[1];
}
getTimeZone(); // Pacific Daylight Time 

作为替代方案,以下是使用纯javascript获取时区的方法:

(new Date).toString().split('(')[1].slice(0, -1)

获取当前时区标准名称:

function getTimezoneName() {
    var timeSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0));
    var summerOffset = -1 * timeSummer.getTimezoneOffset();
    var timeWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0));
    var winterOffset = -1 * timeWinter.getTimezoneOffset();
    var timeZoneHiddenField;
    if (-720 == summerOffset && -720 == winterOffset) { timeZoneHiddenField = 'Dateline Standard Time'; }
    else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'UTC-11'; }
    else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'Samoa Standard Time'; }
    else if (-660 == summerOffset && -600 == winterOffset) { timeZoneHiddenField = 'Hawaiian Standard Time'; }
    else if (-570 == summerOffset && -570 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Marquesas'; }
    //                else if (-540 == summerOffset && -600 == winterOffset) { timeZoneHiddenField.value = 'America/Adak'; }
    //                else if (-540 == summerOffset && -540 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Gambier'; }
    else if (-480 == summerOffset && -540 == winterOffset) { timeZoneHiddenField = 'Alaskan Standard Time'; }
    //                else if (-480 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific/Pitcairn'; }
    else if (-420 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific Standard Time'; }
    else if (-420 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'US Mountain Standard Time'; }
    else if (-360 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'Mountain Standard Time'; }
    else if (-360 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central America Standard Time'; }
    //                else if (-360 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Pacific/Easter'; }
    else if (-300 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central Standard Time'; }
    else if (-300 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'SA Pacific Standard Time'; }
    else if (-240 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Eastern Standard Time'; }
    else if (-270 == summerOffset && -270 == winterOffset) { timeZoneHiddenField = 'Venezuela Standard Time'; }
    else if (-240 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'SA Western Standard Time'; }
    else if (-240 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Central Brazilian Standard Time'; }
    else if (-180 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'Atlantic Standard Time'; }
    else if (-180 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Montevideo Standard Time'; }
    else if (-180 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'E. South America Standard Time'; }
    else if (-150 == summerOffset && -210 == winterOffset) { timeZoneHiddenField = 'Mid-Atlantic Standard Time'; }
    else if (-120 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'America/Godthab'; }
    else if (-120 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'SA Eastern Standard Time'; }
    else if (-60 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Cape Verde Standard Time'; }
    else if (0 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Azores Daylight Time'; }
    else if (0 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'Morocco Standard Time'; }
    else if (60 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'GMT Standard Time'; }
    else if (60 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Africa/Algiers'; }
    else if (60 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'Namibia Standard Time'; }
    else if (120 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Central European Standard Time'; }
    else if (120 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'South Africa Standard Time'; }
    else if (180 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'GTB Standard Time'; }
    else if (180 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'E. Africa Standard Time'; }
    else if (240 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'Russian Standard Time'; }
    else if (240 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Arabian Standard Time'; }
    else if (270 == summerOffset && 210 == winterOffset) { timeZoneHiddenField = 'Iran Standard Time'; }
    else if (270 == summerOffset && 270 == winterOffset) { timeZoneHiddenField = 'Afghanistan Standard Time'; }
    else if (300 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Pakistan Standard Time'; }
    else if (300 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'West Asia Standard Time'; }
    else if (330 == summerOffset && 330 == winterOffset) { timeZoneHiddenField = 'India Standard Time'; }
    else if (345 == summerOffset && 345 == winterOffset) { timeZoneHiddenField = 'Nepal Standard Time'; }
    else if (360 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'N. Central Asia Standard Time'; }
    else if (360 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'Central Asia Standard Time'; }
    else if (390 == summerOffset && 390 == winterOffset) { timeZoneHiddenField = 'Myanmar Standard Time'; }
    else if (420 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'North Asia Standard Time'; }
    else if (420 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'SE Asia Standard Time'; }
    else if (480 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'North Asia East Standard Time'; }
    else if (480 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'China Standard Time'; }
    else if (540 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'Yakutsk Standard Time'; }
    else if (540 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Tokyo Standard Time'; }
    else if (570 == summerOffset && 570 == winterOffset) { timeZoneHiddenField = 'Cen. Australia Standard Time'; }
    else if (570 == summerOffset && 630 == winterOffset) { timeZoneHiddenField = 'Australia/Adelaide'; }
    else if (600 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Asia/Yakutsk'; }
    else if (600 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'E. Australia Standard Time'; }
    else if (600 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'AUS Eastern Standard Time'; }
    else if (630 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Australia/Lord_Howe'; }
    else if (660 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'Tasmania Standard Time'; }
    else if (660 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'West Pacific Standard Time'; }
    else if (690 == summerOffset && 690 == winterOffset) { timeZoneHiddenField = 'Central Pacific Standard Time'; }
    else if (720 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Magadan Standard Time'; }
    else if (720 == summerOffset && 720 == winterOffset) { timeZoneHiddenField = 'Fiji Standard Time'; }
    else if (720 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'New Zealand Standard Time'; }
    else if (765 == summerOffset && 825 == winterOffset) { timeZoneHiddenField = 'Pacific/Chatham'; }
    else if (780 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'Tonga Standard Time'; }
    else if (840 == summerOffset && 840 == winterOffset) { timeZoneHiddenField = 'Pacific/Kiritimati'; }
    else { timeZoneHiddenField = 'US/Pacific'; }
    return timeZoneHiddenField;
}

> 找到了我正在使用的这个脚本.js:

http://pellepim.bitbucket.org/jstz/

此脚本允许获取浏览器时区的名称,如以下示例所示:

> var timezone = jstz.determine();
> timezone.name(); 
"America/New_York"

但是,它不在jQuery中...

在纯 JavaScript 中使用正则表达式,

var d = new Date();
var s = d.toString();
var zoneName = s.match(".*(\((.*)\))")[2];

想不出任何使用 Jquery 的方法。您可以使用 PHP 获取远程用户国家/地区名称,然后将输出与以下内容进行比较:

1(一系列应用节光时间的国家(不多(。

2( 当前日期。

要获取用户所在国家/地区,请执行以下操作:

function visitor_country() {
    $ip = $_SERVER["REMOTE_ADDR"];
    if(filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    if(filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
            $ip = $_SERVER['HTTP_CLIENT_IP'];
    $result = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip))
            ->geoplugin_countryName;
    return $result <> NULL ? $result : "Unknown";
}
echo visitor_country(); // Output Country name [Ex: United States]
?>

此世界时区地图链接可用于创建数组: http://www.worldtimezone.com/daylight.html

希望这个想法对你有用!

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);

Intl.DateTimeFormat().resolvedOptions().timeZone

这些链接可能会帮助您使用 Jquery 了解时区

或以下代码可能会对您有所帮助

var offset = (new Date()).getTimezoneOffset();
alert(offset);

查看 JSFIddle 实现或进一步解释,请访问 Scott的解决方案

仅适用于时区

function get_time_zone_offset( ) {
    var current_date = new Date();
  alert(current_date);   
  //return -current_date.getTimezoneOffset() / 60;
}

警报弹出窗口也将显示时区,您可以根据需要重新分解时区,在 JS Fiddle 中查看

使用时刻.js+时刻时区.js

moment.tz.guess();

https://github.com/moment/moment-timezone/issues/138

这个网站有一些很好的例子

https://www.geeksforgeeks.org/javascript-date-now/

// Use of Date.now() function 
var d = Date(Date.now()); 
// Converting the number of millisecond in date string 
a = d.toString() 
// Printing the current date                     
document.write("The current date is: " + a)  

现代方法

Matt Johnson-Pint的回答给出了诸如IANA时区数据库(tzdata(格式的"America/Los_Angeles"

Intl.DateTimeFormat().resolvedOptions().timeZone
// -> "America/Los_Angeles"

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);

如果您更喜欢时区的确切名称,如 "Pacific Standard Time" ,则可以使用以下表达式:

Intl.DateTimeFormat(undefined, { timeZoneName: "long" })
        .formatToParts(new Date())
        .find((part) => part.type === "timeZoneName").value
// -> "Pacific Standard Time"

console.log(Intl.DateTimeFormat(undefined, { timeZoneName: "long" }).formatToParts(new Date()).find((part) => part.type === "timeZoneName").value);

这应该比胡安·门德斯的答案更可靠,因为这种方法通过巧妙地匹配(new Date()).toString()输出来工作。但是,对于使用不同语言、浏览器或操作系统的其他人来说,所有的赌注都是错误的。上面的表达式应该更健壮。

所有现代浏览器都支持此功能,甚至 Safari 浏览器也是如此。它在Internet Explorer中不起作用。浏览器兼容性图表中的更多详细信息。

我知道

这个问题很老,但这里有我想出的一个小小的解决方案:

(new Date).toLocaleString('en-US', {
    hour12: false,
    hour: '2-digit',
    timeZoneName: 'long'
}).replace(/^dd /, '');

还没有对此进行广泛测试,但对于我的浏览器,这给了我:

"Mountain Daylight Time"

希望这对那里的某人有所帮助。

没有直接的方法,但你可以这样做:

var dd = new Date((;var d = dd.toString((;

var startOff= d.indexOf('('( + 1;var endOff= d.lastIndexOf('('(;

var str = d.substring(startOff , endOff(;

我创建了一个JS小提琴,您可以在其中看到警报:JSFiddle

var dd = new Date();
var d = dd.toString();
alert(d);
var startOff= d.indexOf('(') + 1;
alert(startOff);
var endOff= d.lastIndexOf(')');
alert(startOff+ "  : " + endOff);
var str = d.substring(startOff , endOff);
alert(str);

相关内容

  • 没有找到相关文章

最新更新