vergleichen - javascript zeit formatieren




Wie bekommst du einen Zeitstempel in JavaScript? (20)

Wie bekomme ich einen Zeitstempel in JavaScript?

Etwas, das dem Zeitstempel von Unix ähnelt, dh eine einzige Zahl, die die aktuelle Uhrzeit und das aktuelle Datum darstellt. Entweder als Zahl oder als Zeichenfolge.


Kurz und schick:

+ new Date()

Ein unärer Operator wie plus löst die valueOf Methode im Date Objekt aus und gibt den Zeitstempel (ohne Änderung) zurück.

Einzelheiten:

In fast allen aktuellen Browsern können Sie Date.now() , um den UTC-Zeitstempel in Millisekunden Date.now() . Eine bemerkenswerte Ausnahme ist IE8 und früher (siehe Kompatibilitätstabelle ).

Sie können jedoch leicht eine Unterlage dafür erstellen:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Um den Zeitstempel in Sekunden zu erhalten , können Sie Folgendes verwenden:

Math.floor(Date.now() / 1000)

Oder alternativ könnten Sie verwenden:

Date.now() / 1000 | 0

Die sollte etwas schneller sein, aber auch weniger lesbar ( siehe auch diese Antwort ).

Ich würde Date.now() (mit Kompatibilitäts-Shim) empfehlen. Es ist etwas besser, weil es kürzer ist und kein neues Date Objekt erstellt. Wenn Sie jedoch kein Shim und maximale Kompatibilität wünschen, können Sie die "alte" Methode verwenden, um den Zeitstempel in Millisekunden abzurufen :

new Date().getTime()

Das kannst du dann in Sekunden umwandeln:

Math.round(new Date().getTime()/1000)

Und Sie können auch die Methode valueOf verwenden, die wir oben gezeigt haben:

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());


Alle Browser, die Date.now nicht unterstützen, können Sie hiermit das aktuelle Datum abrufen:

currentTime = Date.now() || +new Date()

Der Code Math.floor(new Date().getTime() / 1000) kann auf new Date / 1E3 | 0 verkürzt werden new Date / 1E3 | 0

Überspringen Sie den direkten Date.getTime() und verwenden Sie | 0 | 0 als Ersatz für die Math.floor() Funktion. Es ist auch gut zu 1E3 , dass 1E3 ein kürzeres Äquivalent für 1000 (Großbuchstaben E werden bevorzugt als Kleinbuchstaben, um 1E3 als Konstante 1E3 ).

Als Ergebnis erhalten Sie Folgendes:

var ts = new Date / 1E3 | 0;

console.log(ts);


Die Date.getTime() -Methode kann mit einer kleinen Änderung verwendet werden:

Der von der getTime-Methode zurückgegebene Wert ist die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC.

Teilen Sie das Ergebnis durch 1000, um den Unix-Zeitstempel zu erhalten.

(new Date).getTime() / 1000

Die Date.valueOf() -Methode ist funktional äquivalent zu Date.getTime() können arithmetische Operatoren am Date-Objekt verwendet werden, um identische Ergebnisse zu erzielen. Meiner Meinung nach wirkt sich dieser Ansatz auf die Lesbarkeit aus.


Eine, die ich noch nicht gesehen habe

Math.floor(Date.now() / 1000); // current time in seconds

Eine andere, die ich noch nicht gesehen habe, ist

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

Für einen Zeitstempel mit einer Mikrosekunden-Auflösung gibt es performance.now .

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Dies könnte zum Beispiel 1436140826653.139 ergeben, während Date.now nur 1436140826653 ergibt.


Hier ist eine einfache Funktion zum Generieren von Zeitstempeln im Format: 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())));
}

Ich empfehle dringend die Verwendung von moment.js . Um die Anzahl der Millisekunden seit der UNIX-Epoche abzurufen, tun Sie

moment().valueOf()

Um die Anzahl der Sekunden seit der UNIX-Epoche abzurufen, tun Sie

moment().unix()

Du kannst auch mal so konvertieren:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Das mache ich die ganze Zeit. Kein Wortspiel beabsichtigt.

Verwenden Sie moment.js im Browser:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Weitere Informationen, einschließlich anderer Möglichkeiten zur Installation und Verwendung von MomentJS, finden Sie in den zugehörigen docs


Ich mag das, weil es klein ist:

+new Date

Ich mag das auch, weil es genauso kurz ist und mit modernen Browsern kompatibel ist und über 500 Leute dafür gestimmt haben, dass es besser ist:

Date.now()

JavaScript arbeitet mit der Anzahl von Millisekunden seit der Epoche, während die meisten anderen Sprachen mit den Sekunden arbeiten. Sie könnten mit Millisekunden arbeiten, aber sobald Sie einen Wert übergeben, um PHP zu sagen, werden die nativen Funktionen von PHP wahrscheinlich fehlschlagen. Um sicher zu gehen, benutze ich immer die Sekunden, nicht die Millisekunden.

Dies gibt Ihnen einen Unix-Zeitstempel (in Sekunden):

var unix = Math.round(+new Date()/1000);

Dies gibt Ihnen die Millisekunden seit der Epoche (nicht Unix-Zeitstempel):

var milliseconds = new Date().getTime();

Sie können nur verwenden

    var timestamp = new Date().getTime();
    console.log(timestamp);

um den aktuellen Zeitstempel zu erhalten. Sie müssen nichts weiter tun.


Um nur zusammenzufassen, hier eine Funktion, um einen Zeitstempel-String in Javascript zurückzugeben. Beispiel: 15:06:38 Uhr

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

Wenn Sie einen einfachen Weg zum Erstellen eines Zeitstempels in Node.js wünschen, funktioniert dies gut.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

Unser Team verwendet dies, um den Cache in einer localhost-Umgebung zu überbrücken. Die Ausgabe ist /dist/css/global.css?v=245521377 Dabei ist 245521377 der von hrtime() generierte Zeitstempel.

Hoffentlich hilft das, die oben genannten Methoden können auch funktionieren, aber ich habe festgestellt, dass dies der einfachste Ansatz für unsere Bedürfnisse in Node.js ist.


Zum jetzigen Zeitpunkt ist die beste Antwort neun Jahre alt, und seitdem hat sich viel geändert. Nicht zuletzt haben wir eine nahezu universelle Unterstützung für eine nicht hackige Lösung:

Date.now()

Wenn Sie absolut sicher sein möchten, dass dies nicht in einem alten Browser (vor dem 9) bricht, können Sie es hinter einen Haken setzen:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

Dies gibt die Millisekunden seit der Epoche zurück, natürlich nicht in Sekunden.

MDN




Ich gebe mehrere Lösungen mit Beschreibungen in dieser Antwort. Bei Unklarheiten können Sie gerne Fragen stellen
PS: Leider hat dies jemand mit der besten Antwort verschmolzen, ohne Anerkennung zu geben.

Schnelle und schmutzige Lösung:

Date.now() /1000 |0

Warnung : Wenn Sie die magische |0 Magie verwenden, kann es im Jahr 2038 brechen und negative Zahlen zurückgeben. Verwenden Math.floor() stattdessen Math.floor()

Math.floor() Lösung:

Math.floor(Date.now() /1000);

Einige nerdige Alternative von Derek 功夫 會 功夫 aus den Kommentaren unterhalb dieser Antwort:

new Date/1e3|0

Polyfill, damit Date.now() funktioniert:

Damit es in IE funktioniert, können Sie Folgendes tun (Polyfill von MDN ):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Wenn Sie sich nicht für das Jahr, den Wochentag oder die Sommerzeit interessieren, können Sie es entfernen und nach 2038 verwenden:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

Einige Ausgabe davon, 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 wird dadurch die Sommerzeit verkürzt. Abhängig davon, was Sie erstellen, kann dies für Sie nützlich sein, wenn Sie binäre Operationen für Zeitstempel ausführen müssen, nachdem int32 im Jahr 2038 unterbrochen wird.

Dies gibt auch negative Werte zurück, aber nur, wenn der Benutzer des PCs, auf dem Sie Ihren Code ausführen, die Uhr des PCs mindestens auf den 31. Dezember des Vorjahres ändert.

Wenn Sie nur die relative Zeit ab dem Zeitpunkt erfahren möchten, zu dem der Code zuerst durchlaufen wurde, können Sie Folgendes verwenden:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

Falls Sie jQuery verwenden, können Sie $.now() wie in jQuery's Docs beschrieben verwenden , was die Polyfill-Funktion überflüssig macht, da $.now() intern dasselbe tut: (new Date).getTime()

Wenn Sie sich einfach über die Version von jQuery freuen, sollten Sie this Antwort in Betracht ziehen, da ich sie selbst nicht gefunden habe.

Nun eine winzige Erklärung, was |0 tut:

Durch die Bereitstellung von | Sie weisen den Interpreter an, eine binäre ODER-Operation auszuführen. Date.now() / 1000 erfordern absolute Zahlen, wodurch das Dezimalergebnis von Date.now() / 1000 in eine Ganzzahl umgewandelt wird.

Während dieser Konvertierung werden Dezimalzahlen entfernt. Dies führt zu demselben Ergebnis wie Math.floor() jedoch weniger Code.

Seien Sie jedoch gewarnt: Es wird ein 64-Bit-Double in eine 32-Bit-Ganzzahl konvertiert. Dies führt zu Informationsverlust bei großen Zahlen. Zeitstempel werden nach 2038 aufgrund eines 32-Bit-Integer-Überlaufs unterbrochen.

Weitere Informationen zu Date.now folgendem Link: MDN


Das native Datumsobjekt in JavaScript ist die Art, wie wir alle Daten über die Zeit erhalten.

Seien Sie einfach in JavaScript vorsichtig, der Zeitstempel hängt von der Einstellung des Client-Computers ab, daher ist der Zeitstempel nicht zu 100% genau. Um das beste Ergebnis zu erzielen, müssen Sie den Zeitstempel von der Serverseite erhalten .

Wie auch immer, mein bevorzugter Weg ist die Verwendung von Vanille. Dies ist eine übliche Art und Weise, dies in JavaScript zu tun:

Date.now(); //return 1495255666921

In MDN wird es wie folgt erwähnt:

Die Date.now () -Methode gibt die Anzahl der seit dem 1. Januar 1970 um 00:00:00 UTC verstrichenen Millisekunden zurück.
Da now () eine statische Methode von Date ist, verwenden Sie es immer als Date.now ().

Wenn Sie eine Version unter ES5 verwenden, Date.now(); funktioniert nicht und Sie müssen Folgendes verwenden:

new Date().getTime();

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


var time = Date.now || function() {
  return +new Date;
};

time();






unix-timestamp