Hoe kan ik de tijdzone-informatie van de bezoeker verzamelen?
Ik heb beide nodig:
- de tijdzone (bijvoorbeeld Europa/Londen)
- en de offset van UTC of GMT (bijvoorbeeld UTC+01)
Antwoord 1, autoriteit 100%
Gebruik getTimezoneOffset()
U kunt de tijdzone offsetin minuten als volgt krijgen:
var offset = new Date().getTimezoneOffset();
console.log(offset);
// if offset equals -60 then the time zone offset is UTC+01
Antwoord 2, autoriteit 98%
Het gebruik van een offset om de tijdzone te berekenen is een verkeerde benadering en je zult altijd problemen tegenkomen. Tijdzones en zomertijdregels kunnen meerdere keren per jaar veranderen, en het is moeilijk om veranderingen bij te houden.
Als u de IANA-tijdzonevan het systeem in JavaScript wilt gebruiken, moet u
gebruiken
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Antwoord 3, autoriteit 21%
Ik realiseer me dat dit antwoord een beetje off-topic is, maar ik kan me voorstellen dat velen van ons die op zoek waren naar een antwoord, ook de tijdzone wilden formatteren voor weergave en misschien ook de zone-afkorting wilden krijgen. Dus hier gaat het…
Als u wilt dat de tijdzone van de client netjes wordt opgemaakt, kunt u vertrouwen op de JavaScript Date.toString-methode en het volgende doen:
var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];
Dit geeft u bijvoorbeeld ‘GMT-0400 (EST)’, inclusief de tijdzoneminuten indien van toepassing.
Als alternatief kunt u met regex elk gewenst deel extraheren:
Voor “GMT-0400 (EDT)”:
new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]
Voor “GMT-0400”:
new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]
Voor alleen “EDT”:
new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]
Voor slechts “-0400”:
new Date().toString().match(/([-\+][0-9]+)\s/)[1]
Date.toString-referentie: https://developer.mozilla.org /en/JavaScript/Reference/Global_Objects/Date/toString
BEWERK 10/6/2020 – De bovenstaande oplossing werkt mogelijk niet in alle browsers en locales. Mijn huidige aanbeveling is om een bibliotheek te gebruiken. Enkele goede populaire bibliotheken zijn: moment, date-fns 2, luxon of dayjs.
Antwoord 4, autoriteit 11%
Er is al een antwoord gegeven op het verkrijgen van een offset in minuten als een geheel getal, maar voor het geval iemand de lokale GMT-offset als een string wil, b.v. "+1130"
:
function pad(number, length){
var str = "" + number
while (str.length < length) {
str = '0'+str
}
return str
}
var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
pad(parseInt(Math.abs(offset/60)), 2)+
pad(Math.abs(offset%60), 2))
Antwoord 5, autoriteit 11%
U kunt gebruiken:
moment-tijdzone
<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>
// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();
Detectie van de tijdzone van de browser is nogal lastig om juist te krijgen, omdat de browser weinig informatie verstrekt.
Moment Timezone gebruikt Date.getTimezoneOffset()
en Date.toString()
op een handvol momenten rond het huidige jaar om zoveel mogelijk informatie over de browseromgeving te verzamelen als mogelijk. Vervolgens vergelijkt het die informatie met alle geladen tijdzonegegevens en geeft het de beste overeenkomst. In het geval van banden wordt de tijdzone met de stad met de grootste bevolking teruggegeven.
console.log(moment.tz.guess()); // America/Chicago
Antwoord 6, autoriteit 8%
Ik heb een functie in mijn project geschreven, die de tijdzone retourneert in de indeling hh:mm
. Ik hoop dat dit iemand kan helpen:
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// Outputs: +5:00
Antwoord 7, autoriteit 4%
Een one-liner die zowel de offset als de tijdzone geeft, is door simpelweg toTimeString()op een nieuw Date-object. Van MDN:
De methode
toTimeString()
retourneert het tijdgedeelte van een Date-object in door mensen leesbare vorm in Amerikaans Engels.
Het addertje onder het gras is dat de tijdzone niet in het standaard IANA-formaat staat; het is wat gebruiksvriendelijker dan het “continent/city” IANAformaat. Probeer het uit:
console.log(new Date().toTimeString().slice(9));
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
console.log(new Date().getTimezoneOffset() / -60);
Antwoord 8, autoriteit 2%
probeer getTimezoneOffset()
van het Date
object:
var curdate = new Date()
var offset = curdate.getTimezoneOffset()
Deze methode retourneert de tijdzone-offset in minuten, wat het verschil is tussen GMT en lokale tijd in minuten.
Antwoord 9
JavaScript:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
Antwoord 10
Probeer dit:
new Date().toLocaleString("en-US",Intl.DateTimeFormat().resolvedOptions().timeZone)
Dit zoekt naar timeZone in de browser van uw klant.
Antwoord 11
Met moment.js:
moment().format('zz');
Antwoord 12
Met momentjskun je de huidige tijdzone vinden als
console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
Antwoord 13
Tijdzone in uren-
var offset = new Date().getTimezoneOffset();
if(offset<0)
console.log( "Your timezone is- GMT+" + (offset/-60));
else
console.log( "Your timezone is- GMT-" + offset/60);
Antwoord 14
Deze waarde is afkomstig van de computer van de gebruiker en kan op elk moment worden gewijzigd, dus ik denk dat het niet uitmaakt, ik wil gewoon een geschatte waarde krijgen en deze vervolgens op mijn server naar GMT converteren.
Ik kom bijvoorbeeld uit Taiwan en het retourneert “+8” voor mij.
JS
function timezone() {
var offset = new Date().getTimezoneOffset();
var minutes = Math.abs(offset);
var hours = Math.floor(minutes / 60);
var prefix = offset < 0 ? "+" : "-";
return prefix+hours;
}
$('#result').html(timezone());
HTML
<div id="result"></div>
Resultaat
+8
Antwoord 15
Zie dat deze resulterende operator het tegenovergestelde was van de tijdzone. Dus pas een wiskundige functie toe en valideer het getal minder of meer.
var a = new Date().getTimezoneOffset();
var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;
console.log(res)
Antwoord 16
function getLocalTimeZone() {
var dd = new Date();
var ddStr = dd.toString();
var ddArr = ddStr.split(' ');
var tmznSTr = ddArr[5];
tmznSTr = tmznSTr.substring(3, tmznSTr.length);
return tmznSTr;
}
Voorbeeld: do 21 juni 2018 18:12:50 GMT+0530 (Indiase standaardtijd)
Op/P: +0530
Antwoord 17
Probeer dit,
new Date().toString().split("GMT")[1].split(" (")[0]
Antwoord 18
Dit zou mijn oplossing zijn:
// For time zone:
const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
// Offset hours:
const offsetHours = new Date().getTimezoneOffset() / 60;
console.log(`${timeZone}, ${offsetHours}hrs`);
Run code snippetHide resultsExpand snippet
Antwoord 19
Als u alleen de afkorting “MST” of “EST” voor de tijdzone nodig heeft:
function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
return timeZone;
}
console.log(getTimeZone());
Antwoord 20
Op de new Date(
) kun je de offset krijgen, om de naam van de tijdzone te krijgen:
new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
je krijgt de waarde tussen ()
aan het einde van de datum, dat is de naam van de tijdzone.
Antwoord 21
Als alternatief voor new Date().getTimezoneOffset()
en moment().format('zz')
kun je ook momentjs:
var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
Antwoord 22
Gebruik dit om OffSet naar positief te converteren:
var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
Antwoord 23
Eens had ik deze “eenvoudige” taak en gebruikte ik (new Date()).getTimezoneOffset()
– de aanpak die hier algemeen wordt voorgesteld. Maar het bleek dat de oplossing niet helemaal de juiste was.
Om een aantal ongedocumenteerde redenen gaf new Date()
in mijn geval GMT+0200terug terwijl new Date(0)
GMT+ retourneerde 0300wat gelijk had. Sindsdien gebruik ik altijd
(new Date(0)).getTimezoneOffset()
om een correcte timeshift te krijgen.
Antwoord 24
Waarom gebruik je niet gewoon:
function timezoneOffset(date: Date) {
return 6000 * ((date.getUTCHours() - date.getHours()) * 60 + ((date.getUTCMinutes() - date.getMinutes())))
}
Antwoord 25
Als je alleen de tijdzone wilt (zoals IST, GMT, etc.), gebruik dan dit:
var timezone = new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1];
var parts = timezone.split(' ');
var tz = "";
parts.forEach(function (element) { tz += element.substring(0, 1); });
Antwoord 26
Je moet gewoon moment.js en jstz.js opnemen
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>
en daarna
<script>
$(function(){
var currentTimezone = jstz.determine();
var timezone = currentTimezone.name();
alert(timezone);
});
</script>
Antwoord 27
Dit is heel goed werk voor mij:
// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
Antwoord 28
je kunt dit gewoon proberen.
het geeft je de huidige machinetijd terug
var _d = new Date(),
t = 0,
d = new Date(t*1000 + _d.getTime())
Antwoord 29
Dit zal het werk doen.
var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);
Thu May 25 2017 21:35:14 GMT+0300 (IDT)
niet gedefinieerd