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.

War es hilfreich?

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 stattdessen Math.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)

REF: http://api.jquery.com/jQuery. now /

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):

 image description hier

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

Für lodash und Strich Benutzer, die Verwendung _.now.

var timestamp = _.now(); // in milliseconds

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.

MDN-Dokumentation auf Date.now

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top