Wie bekommt man einen Zeitstempel in JavaScript?
-
03-07-2019 - |
Frage
Wie kann ich einen Zeitstempel in JavaScript bekommen?
Etwas ähnliches wie Unix-Zeitstempel, das heißt, eine einzige Zahl, die die aktuelle Uhrzeit und das Datum darstellt. Entweder als Zahl oder ein String.
Lösung
Kurz & Snazzy:
+ new Date()
Ein unärer Operator wie plus
löst die valueOf
Methode im Date
Objekt, und es gibt den Zeitstempel (ohne Änderung).
Details:
Auf fast allen gängigen Browsern können Sie Date.now()
den UTC-Zeitstempel erhalten in Millisekunden ; eine bemerkenswerte Ausnahme ist IE8 und früher (siehe Kompatibilitätstabelle ) .
Sie können leicht eine Shim dafür machen, aber:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
Um den Zeitstempel in Sekunden , können Sie verwenden:
Math.floor(Date.now() / 1000)
oder alternativ könnten Sie:
Date.now() / 1000 | 0
Was sollte etwas schneller sein, aber auch weniger lesbar (auch sehen diese Antwort ).
Ich würde empfehlen, Date.now()
Verwendung (mit Kompatibilität Shim). Es ist etwas besser, weil es kürzer ist und kein neues Date
Objekt erstellen. Wenn Sie jedoch keine Shim & maximale Kompatibilität möchten, können Sie die „alte“ Methode verwenden, um den Zeitstempel in Millisekunden zu erhalten :
new Date().getTime()
, die Sie dann auf Sekunden wie folgt konvertieren:
Math.round(new Date().getTime()/1000)
Und Sie können auch die valueOf
Methode verwenden, die oben gezeigt:
new Date().valueOf()
Zeitstempel in Millisekunden
var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();
console.log(timeStampInMs, Date.now());
Andere Tipps
Ich mag das, weil es klein ist:
+new Date
ich so auch, weil es nur so kurz ist und ist kompatibel mit modernen Browsern, und mehr als 500 Menschen gestimmt, dass es besser ist:
Date.now()
JavaScript arbeitet mit der Anzahl von Millisekunden seit Beginn der Epoche, während die meisten anderen Sprachen mit den Sekunden arbeiten. Sie könnten mit Millisekunden arbeiten, aber sobald Sie einen Wert übergeben PHP zu sagen, werden die native PHP-Funktionen wahrscheinlich fehlschlagen. So sicher sein, habe ich immer die Sekunden verwenden, nicht Millisekunden.
Dies gibt Ihnen einen Unix-Zeitstempel (in Sekunden):
var unix = Math.round(+new Date()/1000);
Dies gibt Ihnen die Millisekunden seit Beginn der Epoche (nicht Unix-Zeitstempel):
var milliseconds = new Date().getTime();
var time = Date.now || function() {
return +new Date;
};
time();
Ich biete mehrere Lösungen mit Beschreibungen in dieser Antwort. Fühlen Sie sich frei, Fragen zu stellen, wenn etwas unklar ist
PS:. Leider jemand fusionierte diese nach oben Antwort ohne Kredit zu geben
Schnelle und schmutzige Lösung:
Date.now() /1000 |0
Warnung : es könnte Pause in 2038 und das Rück negative Zahlen, wenn Sie die
|0
Magie zu tun. Verwenden Sie stattdessenMath.floor()
diesem Zeitpunkt
Math.floor()
Lösung:
Math.floor(Date.now() /1000);
Einige nerdy Alternative von Derek 朕 會 功夫 aus den Kommentaren unter dieser Antwort wurde:
new Date/1e3|0
Polyfill Date.now()
Funktion zu erhalten:
Um es in IE arbeiten Sie könnten diese (Polyfill tun von MDN ):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Wenn Sie nicht über das Jahr / Tag der Woche / Tageslicht egal Zeitersparnis Sie es weg abstreifen konnte und verwenden diese nach 2038:
var now = (function () {
var year = new Date(new Date().getFullYear().toString()).getTime();
return function () {
return Date.now() - year
}
})();
Einige Ausgang, wie es aussehen wird:
new Date() Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit ) new Date(now()) Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )
Natürlich bricht es die Sommerzeit aber je nachdem, was Sie bauen diese für Sie nützlich sein könnte, wenn Sie binäre tun müssen Operationen auf Zeitstempel nach int32 werden in 2038 brechen.
Dies wird auch negative Werte zurück, aber nur, wenn der Benutzer dieses PC Sie Ihren Code ausgeführt wird, ist die PC-Uhr zumindest Wechsel zu 31. Dezember des Vorjahres.
Wenn Sie nur die relative Zeit von dem Punkt wissen wollen, wenn der Code ausgeführt wurde durch den ersten Sie so etwas wie diese verwenden:
var relativeTime = (function () {
var start = Date.now();
return function () {
return Date.now() - start
}
})();
Falls Sie jQuery verwenden Sie $.now()
wie in jQuery Docs beschrieben verwenden könnte , die die polyfill hinfällig, da $.now()
intern macht das gleiche tut: (new Date).getTime()
Wenn Sie sind einfach nur glücklich über jQuery-Version betrachten Upvoting dieses beantworten, da ich es nicht gefunden ich selbst.
Jetzt ein winziger explaination von dem, was |0
tut:
Mit dem |
bietet, können Sie den Dolmetscher sagen, ein binäres ODER-Operation zu tun. Bit-Operationen erfordern absolute Zahlen, die die dezimale resultieren aus Date.now() / 1000
in eine Ganzzahl dreht.
Während diese Umwandlung, Dezimalzahlen entfernt werden, in dem gleichen Ergebnis führen, wie Math.floor()
verwenden, aber weniger Code.
Seien Sie gewarnt: es wird eine 64-Bit-Doppel auf eine 32-Bit-Integer konvertieren. Dies wird in dem Informationsverlust führen, wenn sie mit großen Zahlen zu tun. Zeitstempel bricht nach 2038 wegen 32-Bit-Integer-Überlauf.
Für weitere Informationen über Date.now
folgen Sie diesem Link: Date.now()
@ MDN
var timestamp = Number(new Date()); // current time as number
jQuery bietet seine eigene Methode den Zeitstempel zu erhalten:
var timestamp = $.now();
(außer es nur implementiert (new Date).getTime()
Ausdruck)
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
Just zu addieren, ist hier eine Funktion eines Zeitstempel Zeichenfolge in Javascript zurückzukehren. Beispiel: 15.06.38 PM
function displayTime() {
var str = "";
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()
var seconds = currentTime.getSeconds()
if (minutes < 10) {
minutes = "0" + minutes
}
if (seconds < 10) {
seconds = "0" + seconds
}
str += hours + ":" + minutes + ":" + seconds + " ";
if(hours > 11){
str += "PM"
} else {
str += "AM"
}
return str;
}
Zusätzlich zu den anderen Optionen, wenn Sie ein Datumsformat ISO mögen, erhalten Sie es direkt bekommen
console.log(new Date().toISOString());
Datum , ein gebürtiges Objekt in JavaScript ist die Art, wie wir alle Daten über Zeit.
Nur vorsichtig sein, in JavaScript der Zeitstempel ist abhängig von dem Client-Computer gesetzt, so dass es nicht zu 100% korrekt Zeitstempel ist. Um das beste Ergebnis zu erhalten, müssen Sie den Zeitstempel aus der Server-Seite bekommen .
Wie auch immer, meine bevorzugte Art und Weise unter Verwendung von Vanille. Dies ist ein üblicher Weg, es in JavaScript zu tun:
Date.now(); //return 1495255666921
In MDN es erwähnt wie folgt:
Die Date.now () Methode gibt die Anzahl der Millisekunden verstrichen ist, seit 1. Januar 1970 00.00.00 UTC.
Denn jetzt () eine statische Methode von Date ist, verwenden Sie es immer als Date.now ().
Wenn Sie eine Version unter ES5 verwenden, Date.now();
nicht funktioniert, und Sie müssen verwenden:
new Date().getTime();
Eine habe ich noch nicht gesehen
Math.floor(Date.now() / 1000); // current time in seconds
Ein weiterer, den ich noch nicht gesehen haben, ist
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Die Date.getTime()
Methode kann mit einem wenig verwendet werden zwicken:
Der Wert der getTime Methode zurückgegeben wird, ist die Anzahl der Millisekunden seit 1. Januar 1970 00.00.00 UTC.
Das Ergebnis durch 1000 den Unix-Zeitstempel zu erhalten, floor
, falls erforderlich:
(new Date).getTime() / 1000
Die Date.valueOf()
Methode ist funktional äquivalent zu Date.getTime()
, die es ermöglicht, arithmetische Operatoren auf Date-Objekt zu verwenden, um die gleichen Ergebnisse zu erzielen. Meiner Meinung nach, wirkt sich dieser Ansatz die Lesbarkeit.
Der Code Math.floor(new Date().getTime() / 1000)
kann new Date / 1E3 | 0
verkürzt werden.
Betrachten direkter getTime()
Aufruf und Nutzung | 0
als Ersatz für Math.floor()
Funktion.
Es ist auch gut zu erinnern 1E3
ist eine kürzere Äquivalent für 1000
(Groß E als Klein bevorzugt wird 1E3
als Konstante, um anzuzeigen).
Als Ergebnis erhalten Sie die folgende erhalten:
var ts = new Date / 1E3 | 0;
console.log(ts);
Ich empfehle moment.js
verwenden. Um die Anzahl der Millisekunden seit dem UNIX-Epoche zu erhalten, tun
moment().valueOf()
Um die Anzahl der Sekunden seit dem UNIX-Epoche zu erhalten, tut
moment().unix()
Sie können auch mal konvertieren etwa so:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
ich, dass die ganze Zeit. Kein Wortspiel beabsichtigt.
Um moment.js
im Browser zu verwenden:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
Für weitere Informationen, einschließlich andere Möglichkeiten der Installation und Verwendung von MomentJS finden ihre docs
Hier ist eine einfache Funktion Zeitstempel im Format zu generieren: mm / tt / jj hh: mi: ss
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)
// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720
// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087
// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Sie können nur verwenden
var timestamp = new Date().getTime();
console.log(timestamp);
die aktuellen Zeitstempel zu erhalten. Keine Notwendigkeit zu tun, nichts extra.
Für einen Zeitstempel mit Mikrosekunden-Auflösung, gibt es performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
Dies könnte beispielsweise Ausbeute 1436140826653.139
, während Date.now
nur gibt 1436140826653
.
Heute - 2018.06.27 biete ich einige Zeit Vergleich zum reinen js Lösungen. Dies kann für Menschen nützlich sein, die in JS bekommen / die Zeit messen wollen in Licht / effiziente Art und Weise (z. B. für Echtzeit-Anwendungen wie Simulationen, Spiele usw.)
Getestet auf MacOs High Sierra 10.13.3 auf Chrome 67.0.3396.99 (64-Bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-Bit). Auf Screenshot unten zeige ich Ihnen Ergebnisse für schnellsten Browser (Safari):
Als ich die Date.now()
beobachten war schnellste Methode Zeitstempel für alle drei Browser zu erhalten. Safari hat 19,2 Mio. Operationen pro Sekunde, Firefox 16,1 Mio., Chrome 7.8M.
Die new Date()*1
war langsamste für Chrome (2,8 M) und Firefox (2.6M). Die Number(new Date())
war langsamste für Safari (2.9M).
So ist der Gewinner JS-Code ist Date.now()
und schnellste Browser ist Safari (2x schneller als Chrom!).
Sie können Test auf Ihrem Rechner ausführen hier: https://jsperf.com/timestamp-test-x .
Jeder Browser nicht Date.now unterstützt, können Sie diese verwenden, um die aktuelle Datum Zeit zu erhalten:
currentTime = Date.now() || +new Date()
dieses Produkt eine Lösung: der in js Unix-Zeitstempel zu Zeit konvertiert versuchen, diese
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
habe ich gelernt, eine wirklich coole Art, ein gegebenes Date-Objekts zu einem Unix-Zeitstempel aus dem Quellcode von JQuery Plätzchen den anderen Tag.
Hier ist ein Beispiel:
var date = new Date();
var timestamp = +date;
Wenn Sie will einen grundlegenden Weg, um einen Zeitstempel zu erzeugen, in Node.js dies gut funktioniert.
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
Unser Team wird mit dieser Cache in einer lokalen Host-Umgebung zu sprengen. Der Ausgang ist /dist/css/global.css?v=245521377
245521377
wo der Zeitstempel von hrtime()
erzeugt wird.
Hoffentlich hilft, über die Methoden so gut funktionieren können, aber ich fand dies der einfachste Ansatz für unsere Bedürfnisse in Node.js sein.
Dies scheint zu funktionieren.
console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes')));
//returns 10/8/2015 21:08:18
var clock = {
now:Date.now(),
add:function (qty, units) {
switch(units.toLowerCase()) {
case 'weeks' : val = qty * 1000 * 60 * 60 * 24 * 7; break;
case 'days' : val = qty * 1000 * 60 * 60 * 24; break;
case 'hours' : val = qty * 1000 * 60 * 60; break;
case 'minutes' : val = qty * 1000 * 60; break;
case 'seconds' : val = qty * 1000; break;
default : val = undefined; break;
}
return val;
},
format:function (timestamp){
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
// Will display time in xx/xx/xxxx 00:00:00 format
return formattedTime = month + '/' +
day + '/' +
year + ' ' +
hours + ':' +
minutes.substr(-2) +
':' + seconds.substr(-2);
}
};
Moment.js abstrahieren kann eine Menge Schmerz weg mit Javascript Termine im Umgang.
Siehe auch: http://momentjs.com/docs/#/displaying/unix -timestamp /
moment().unix();
Wie dies zu schreiben, die Top-Antwort ist 9 Jahre alt, und viel hat sich seitdem verändert - nicht zuletzt, haben wir in der Nähe von Universal-Unterstützung für eine nicht-hacky Lösung:
Date.now()
Wenn Sie absolut sicher sein wollen, dass dies nicht in einigen alten brechen wird (pre ie9) Browser, können Sie es hinter einem Scheck setzen, etwa so:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Damit wird die Millisekunden seit Epoche Zeit zurückkehren, natürlich, nicht Sekunden.
einfachere Art und Weise:
var timeStamp=event.timestamp || new Date().getTime();
irgendwann muss ich es in Objekte für xmlhttp Anrufe, so dass ich so.
timestamp : parseInt(new Date().getTime()/1000, 10)