Ich weiß, wie man den Zeitzonenversatz erhält, aber was ich brauche, ist die Fähigkeit, etwas wie "Amerika / New York" zu erkennen. Ist das überhaupt mit JavaScript möglich oder muss ich das basierend auf dem Offset zu Gast haben?
Ich weiß, wie man den Zeitzonenversatz erhält, aber was ich brauche, ist die Fähigkeit, etwas wie "Amerika / New York" zu erkennen. Ist das überhaupt mit JavaScript möglich oder muss ich das basierend auf dem Offset zu Gast haben?
Antworten:
Die Internationalisierung API unterstützt immer die Benutzerzeitzone, und wird unterstützt in allen gängigen Browsern.
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Beachten Sie, dass bei einigen älteren Browserversionen, die die Internationalisierungs-API unterstützen, die timeZone
Eigenschaft auf undefined
die Zeitzonenzeichenfolge des Benutzers festgelegt ist. Soweit ich das beurteilen kann, geben zum Zeitpunkt des Schreibens (Juli 2017) alle aktuellen Browser mit Ausnahme von IE11 die Benutzerzeitzone als Zeichenfolge zurück.
Die am besten bewertete Antwort ist wahrscheinlich der beste Weg, um die Zeitzone zu erhalten. Der Intl.DateTimeFormat().resolvedOptions().timeZone
Name der IANA-Zeitzone wird jedoch per Definition in englischer Sprache zurückgegeben.
Wenn Sie den Namen der Zeitzone in der Sprache des aktuellen Benutzers möchten, können Sie ihn wie folgt aus Date
der Zeichenfolgendarstellung analysieren :
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
Getestet in Chrome und Firefox.
Natürlich funktioniert dies in einigen Umgebungen nicht wie vorgesehen. Beispielsweise gibt node.js GMT+07:00
anstelle eines Namens einen GMT-Offset (z. B. ) zurück. Aber ich denke, es ist immer noch als Fallback lesbar.
PS Funktioniert nicht in IE11, genau wie die Intl...
Lösung.
Sie können dieses Skript verwenden. http://pellepim.bitbucket.org/jstz/
Fork oder Clone Repository hier. https://bitbucket.org/pellepim/jstimezonedetect
Sobald Sie das Skript eingefügt haben, können Sie die Liste der Zeitzonen in - jstz.olson.timezones
variable abrufen .
Der folgende Code wird verwendet, um die Zeitzone des Client-Browsers zu bestimmen.
var tz = jstz.determine();
tz.name();
Viel Spaß mit jstz!
Zeitzone mit Namen abrufen (dh "Amerika / New York")
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
gibt zurück undefined
, gibt aber den moment.tz.guess()
korrekten Wert zurück
Sie können einfach Ihren eigenen Code schreiben, indem Sie die Zuordnungstabelle hier verwenden: http://www.timeanddate.com/time/zones/
Oder verwenden Sie die Moment-Zeitzonen-Bibliothek: http://momentjs.com/timezone/docs/
Sehen zone.name; // America/Los_Angeles
oder diese Bibliothek: https://github.com/Canop/tzdetect.js
Dadurch wird der Zeitzonencode (z. B. GMT
) in älterem Javascript abgerufen (ich verwende ein Google App-Skript mit alter Engine):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
Ich stelle das hier nur für den Fall, dass jemand es braucht.
UTC
/ GMT
. Es sieht so aus, als wären andere buchstabiert; zB , Pacific Daylight Time
.
Versuchen Sie diesen Code von hier aus
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
alert(timezone);
});
</script>
In Javascript gibt die Date.getTimezoneOffset () -Methode den Zeitzonenversatz von UTC in Minuten für das aktuelle Gebietsschema zurück.
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
Moment'timezone wird ein nützliches Werkzeug sein. http://momentjs.com/timezone/
Daten zwischen Zeitzonen konvertieren
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