Wie erhalte ich einen UTC Timestamp in JavaScript?
Beim schreiben eine web-Anwendung, ist es sinnvoll zu speichern (server-Seite) alle datetimes in der DB als UTC-Zeitstempel.
Ich war erstaunt, als ich bemerkte, dass Sie nicht nativ viel tun, im Sinne von Timezone-manipulation in JavaScript.
Erweiterte ich das Date-Objekt ein wenig. Macht diese Funktion Sinn? Im wesentlichen, jedes mal, wenn ich senden Sie alles an den server, es wird ein timestamp formatiert mit dieser Funktion...
Kann Sie sehen, keine großen Probleme hier? Oder vielleicht eine Lösung aus einem anderen Blickwinkel?
Date.prototype.getUTCTime = function(){
return new Date(
this.getUTCFullYear(),
this.getUTCMonth(),
this.getUTCDate(),
this.getUTCHours(),
this.getUTCMinutes(),
this.getUTCSeconds()
).getTime();
}
Es scheint nur ein wenig verworren für mich. Und ich bin nicht so sicher über die Leistung.
InformationsquelleAutor der Frage Merc | 2012-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Termine so aufgebaut, verwenden Sie die lokale Zeitzone, so dass die konstruierten Datum falsch. Um die Zeitzone zu einem bestimmten Datum-Objekt zu konstruieren, die aus einer Datum-Zeichenfolge, die enthält die Zeitzone. (Ich hatte Probleme bei der Anreise, dass die Arbeit, die in einer älteren Android-browser.)
Beachten Sie, dass
getTime()
zurück Millisekunden, nicht plain Sekunden.Für eine UTC/Unix-timestamp, das folgende sollte genügen:
Wird es Faktor die aktuelle Zeitzone offset in das Ergebnis. Für eine string-Darstellung, David Ellis Antwort funktioniert.
Klären:
Dass die Eingabe so behandelt wie lokale Zeit. Wenn UTC-Zeit übergeben wird, werden die Ergebnisse abweichen. Beobachten (ich bin in GMT +02:00 jetzt, und es ist 07:50):
Beachten Sie auch, dass
getUTCDate()
nicht als Ersatz fürgetUTCDay()
. Dies ist, weilgetUTCDate()
gibt der Tag des Monats; in der Erwägung, dassgetUTCDay()
gibt der Tag der Woche.InformationsquelleAutor der Antwort DCoder
Könnten Sie es auch tun, nutzen getTimezoneOffset und getTime,
InformationsquelleAutor der Antwort Shiplu Mokaddim
Yeah, brauchen Sie nicht viel zu tun hat; vorausgesetzt, ich verstehe Sie richtig, Sie wollen einfach nur die
toUTCString
Methode.Beachten Sie jedoch, dass die Datum-Werte, die Sie bekommen, beruhen auf der Uhr des client-Rechner, nicht dein server. Wenn Sie brauchen genaue Werte für diesen Zeitraum (zum Beispiel, richtig zu bestellen, wenn diese oder jene Aktion wurde relativ zu einer anderen Aktion durch den Benutzer), die Sie nicht verlassen Sie sich auf die client-Seite Präsenzbibliothek, sowieso, und Sie brauchen, um die Datumsangaben zu berechnen server-Seite basiert ist, wenn der Kunde Sie kontaktiert.
Daran, dass im Grunde alle Ihre client-side code kann geändert werden, indem der client und schädliche Werte zurückgegeben, stattdessen, Sie können garantiert nur den code auf der server-Seite-Behandlung der client-Seite wie einen möglichen Angreifer.
InformationsquelleAutor der Antwort David Ellis
Sie in der Regel brauchen nicht viel zu tun, "Timezone " manipulation" auf der client-Seite. Ich in der Regel versuchen, zu speichern und arbeiten mit UTC Datumsangaben, die in form von
ticks
oder "Anzahl der Millisekunden seit Mitternacht 1. Januar 1970." Wirklich dies vereinfacht die Lagerung, Sortierung, Berechnung der offsets, und die meisten von allen, befreit Sie von den Kopfschmerzen von der "Sommerzeit" Einstellungen". Hier ist ein wenig JavaScript-code, die ich benutze.Um die aktuelle UTC-Zeit:
Dann das, was man im Allgemeinen brauchen, ist das format für Datum/Zeit für die end-user für Ihre lokalen Zeitzone und-format. Im folgenden kümmert sich um die gesamte Komplexität der Formate für Datum und Uhrzeit auf dem client-computer:
Also Folgendes Beispiel:
Gibt die folgenden (für meine US-Gebietsschema " Englisch):
InformationsquelleAutor der Antwort ahmd0
Ich denke wirklich, dass Datum-Werte in js sind weit besser als zu sagen das C# DateTime-Objekte. C# DateTime-Objekte haben eine Art Eigenschaft, aber keine strikte zugrunde liegenden Zeitzone und Zeitzone Konvertierungen sind schwer zu verfolgen, wenn Sie konvertieren zwischen zwei nicht UTC und nicht die lokale Uhrzeit. In js werden alle Datum-Werte haben eine zugrunde liegende UTC-Wert, der übergeben wird, um und bekannt, unabhängig von der offest-oder Zeit-zone Konvertierungen, die Sie tun. Meine größte Beschwerde über das Date-Objekt ist die Menge der undefinierten Verhalten, dass die browser-Entwickler haben gewählt, um zu zählen, die verwirren können Menschen, die Angriffs-Daten in js mit Versuch und Irrtum als das Lesen der spec. Mit so etwas wie iso8601.js löst dieses unterschiedliche Verhalten durch die Definition einer einzigen Implementierung des Date-Objekts.
Standardmäßig die spec sagt, man kann Termine erstellen, die mit einer erweiterten ISO-8601-Datumsformat wie
So können Sie Rückschlüsse auf die genaue UTC-Zeit auf diese Weise.
Wenn Sie möchten, übergeben Sie den Date-Wert zurück an den server, den Sie nennen würde,
oder wenn Sie lieber arbeiten mit einem Millisekunden-Zeitstempel (Anzahl Millisekunden seit dem 1. Januar 1970 UTC)
ISO 8601 ist ein standard. Sie können nicht verwechselt werden, was eine Datums-Zeichenfolge bedeutet, wenn Sie das Datum-offset. Was bedeutet dies für Sie als Entwickler ist, dass Sie nie zu tun haben mit den lokalen Zeit-Konvertierungen selbst. Die lokale Zeit Werte vorhanden sind die rein für den nutzen der user, und date-Werte standardmäßig die Anzeige in Ihrer lokalen Zeit. Alle lokalen Zeit-Manipulationen ermöglichen Ihnen die Anzeige etwas vernünftiges für den Benutzer und konvertieren von Zeichenfolgen von Benutzereingaben. Es ist gute Praxis, um zu konvertieren auf UTC, sobald Sie können, und die js Date-Objekt macht das ziemlich trivial.
Auf der Unterseite gibt es nicht viel Spielraum für zwingen, die Zeitzone oder den Ort für den client (die ich mir bewusst bin), die lästig sein kann für die website-spezifische Einstellungen, aber ich denke, die Argumentation hinter diesem ist, dass es ein Benutzer-Konfiguration, die sollten nicht berührt werden.
Also, kurz gesagt, der Grund, es gibt nicht viele native Unterstützung für die Zeitzone manipulation ist, weil Sie einfach nicht wollen, es zu tun.
InformationsquelleAutor der Antwort Matt Esch
Der einfachste Weg, um UTC-Zeit in ein gängiges format ist wie folgt:
InformationsquelleAutor der Antwort Tahsin Turkoz
Benutze ich folgende:
Einmal definiert wird diese Methode, die Sie tun können:
InformationsquelleAutor der Antwort jlbofh
Wenn Sie möchten, eine one-linerDie UTC Unix-Timestamp erstellt werden können in JavaScript als:
Dadurch wird eine Berücksichtigung der Zeitzone des Systems. Es ist im Grunde der verstrichenen Zeit in Sekunden seit epoch.
Wie es funktioniert:
new Date()
.unary +
vor-Objekt erstellen, konvertieren es zutimestamp integer
. :+new Date()
.+new Date() /1000
~~(+new Date())
InformationsquelleAutor der Antwort Kushal Likhi
Ich denke, das ist eine bessere Lösung
InformationsquelleAutor der Antwort koalex
EDIT: Der code unten funktioniert NICHT. Ich war immer der Annahme, dass new Date().getTime() zurückgegeben wird die Anzahl der Sekunden seit dem 1. Januar 1970 IN DER AKTUELLEN ZEITZONE. Dies ist nicht der Fall: getTime() gibt die Anzahl der Sekunden in UTC. So, der code unten funktioniert Brutto-over-Anpassung. Vielen Dank an alle!]
Zunächst einmal danke ich Ihnen für Ihre fantastische Einblicke.
Ich denke, meine Frage hatte den falschen Titel... sollte es das schon gewesen "Holen Sie sich die UTC Unix-Timestamp /Zeitstempel für ein vorhandenes Datum".
So, wenn ich ein date-Objekt:
War ich nach einer Funktion, die mir sagen würden, "Die UTC-Unix-Zeitstempel".
Diese Funktion zu sein scheint, der eigentliche trick:
Beachten Sie, dass es funktioniert "dies" Dies bedeutet, dass ich tun kann:
Bekommen und die Anzahl der Sekunden seit dem 1. Januar 1970 in Unix-Zeit.
Richtig?
Es ist ein wenig verrückt, für mich, das Javascript speichert alles in UTC-Zeiten, aber dann, um es zu bekommen, dass die Nummer, die ich haben, erstellen Sie ein neues Date-Objekt übergeben die einzelnen UTC Getter und schließlich call getTime() für die...
Merc.
InformationsquelleAutor der Antwort Merc
Ich bin erstaunt, wie Komplex diese Frage ist.
Diese sind alle identisch, und Ihre ganze Werte alle === EPOCH time 😀
Mir nicht glaubst, Check-out:
http://www.epochconverter.com/
InformationsquelleAutor der Antwort fliptopbox
Ich möchte klar machen, neues Datum().getTime() ist in der Tat eine Rückkehr UTC-Wert, so ist es eine wirklich nützliche Methode zum speichern und verwalten von Daten in einer Weise, die nicht wissen, lokalisierte Zeiten.
In anderen Worten, nicht die Mühe mit all den UTC javascript-Funktionen. Stattdessen verwenden Sie einfach das Datum.getTime().
Weitere Infos über die Erklärung ist hier:
Wenn javascript "(new Date()).getTime()" zum ausführen von 2 verschiedenen Zeitzonen.
InformationsquelleAutor der Antwort Stan Lin
Ich denke, das, was Sie erwarten...
Nun,
InformationsquelleAutor der Antwort Kapilrc
Seit
new Date().toUTCString()
gibt eine Zeichenfolge zurück, wie"Wed, 11 Oct 2017 09:24:41 GMT"
Sie können schneiden Sie die letzten 3 Zeichen, und übergeben Sie die in Scheiben geschnittenen stringnew Date()
:InformationsquelleAutor der Antwort Maurice