web-dev-qa-db-fra.com

Obtenir le nom du fuseau horaire

Puis-je obtenir le nom du fuseau horaire du client en utilisant jQuery?

Exemple: heure normale du Pacifique S.A., heure standard de Greenwich, par exemple: https://en.wikipedia.org/wiki/List_of_time_zones_by_country

Liste de temps

29
Nathan Nguyễn

Puis-je obtenir le nom du fuseau horaire du client en utilisant jQuery?

Non, jQuery n'a qu'une seule fonction date/heure, $.now().

Si vous vouliez dire JavaScript, la réponse est toujours no. Vous pouvez uniquement obtenir un fuseau horaire offset à partir de date.getTimezoneOffset(). Vous ne pouvez pas obtenir un fuseau horaire - du moins pas dans tous les navigateurs. Reportez-vous à la section de balise de fuseau horaire wiki intitulée: "Time Zone != Offset"

Vous pouvez deviner au fuseau horaire en utilisant la bibliothèque jsTimeZoneDetect , mais ce n'est qu'une supposition. Cela peut être exact ou non.

Vous pouvez aussi maintenant utiliser moment.js avec le complément moment-fuseau horaire . Il prend désormais en charge la conquête de fuseau horaire avec moment.tz.guess().

Si vous pouvez garantir que vos utilisateurs fonctionnent dans un environnement prenant pleinement en charge la API d'internationalisation ECMAScript , vous pouvez obtenir le fuseau horaire de l'utilisateur comme suit:

Intl.DateTimeFormat().resolvedOptions().timeZone

Vous pouvez consulter le table de compatibilité } sous DateTimeFormat - resolvedOptions().timezone defaults to the Host environment pour déterminer les environnements dans lesquels cela fonctionnera.

Honnêtement, la meilleure chose à faire est de simplement donner à vos utilisateurs un écran quelque part où ils pourront choisir leur fuseau horaire. Vous pouvez utiliser une liste déroulante ou un sélecteur de fuseau horaire basé sur une carte - comme celui-ci . Vous pouvez utiliser jsTimeZoneDetect comme valeur par défaut, mais votre utilisateur devrait pouvoir le changer.

En outre, tous ces éléments vont vous donner un identifiant de fuseau horaire IANA, tel que America/Los_Angeles. Mais les exemples que vous avez donnés semblent être des identifiants de fuseau horaire Windows (à utiliser avec TimeZoneInfo en .net). Vous devriez lire le wiki de la balise de fuseau horaire , puis cette question: Comment traduire entre les fuseaux horaires Windows et IANA?

40
Matt Johnson

La sortie de new Date() est Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time), pouvez-vous l'utiliser? Si vous n'avez pas besoin du nom officiel, vous pouvez simplement utiliser ce qui est entre les parenthèses

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

getTimeZone(); // Pacific Daylight Time 
14
Juan Mendes

Comme solution de rechange, voici comment obtenir un fuseau horaire avec javascript pur :

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

Obtenez le nom standard du fuseau horaire actuel:

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;
}
7
user3119287

J'ai trouvé ce script que j'utilise avec moment.js:

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

Ce script permet d’obtenir le nom du fuseau horaire du navigateur, comme dans cet exemple:

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

Ce n'est pas dans jQuery, cependant ...

5
Josyan

Je ne peux trouver aucun moyen de le faire en utilisant Jquery. Vous pouvez obtenir le nom du pays de l'utilisateur distant à l'aide de PHP, puis comparer le résultat à:

1) un éventail de pays qui appliquent le temps d'économie de lumière (pas beaucoup).

2) date actuelle.

Pour obtenir le pays des utilisateurs:

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]
?>

Ce lien de carte de fuseaux horaires du monde peut être utilisé pour créer le tableau: http://www.worldtimezone.com/daylight.html

J'espère que cette idée fonctionne pour vous!

1
Kareem

En javascript pur en utilisant une expression régulière,

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

Ces liens pourraient vous aider timeZone en utilisant Jquery

ou le code suivant pourrait vous aider

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

checkout JSFIddle implementation ou pour plus d'explications, visitez Solution by Scott

Pour seulement le fuseau horaire

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

}

La fenêtre d'alerte affiche également le fuseau horaire, que vous pouvez re-factoriser selon vos besoins, consultez-le dans JS Fiddle.

0
Digital Alchemist