Jak mogę dostać znacznik czasu w JavaScript?

Coś podobnego do UNIX TimeStamp, czyli pojedynczy numer reprezentujący bieżący czas i datę. Albo jako numer, albo ciąg.

4353
pupeno 21 październik 2008, 13:29

29 odpowiedzi

Lubię to, ponieważ jest mały:

+new Date

Podoba mi się to, ponieważ jest tak krótki i jest kompatybilny z nowoczesnymi przeglądarkami, a ponad 500 osób głosowało, że jest lepszy:

Date.now()
546
xer0x 30 listopad 2017, 19:23

JavaScript działa z liczbą milisekund od epoki, podczas gdy większość innych języków pracuje z sekundami. Możesz pracować z milisekundami, ale jak tylko zdasz wartość do powiedzenia PHP, natywne funkcje PHP prawdopodobnie nie powiedzie się. Aby mieć pewność, że zawsze używam sekund, a nie milisekund.

To da ci znacznik czasu UNIX (w sekundach):

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

To da ci milisekund od epoki (nie Unix TimeStamp):

var milliseconds = new Date().getTime();
286
Peter Mortensen 30 maj 2011, 21:12
var time = Date.now || function() {
  return +new Date;
};

time();
152
Martin Tournoij 16 grudzień 2014, 13:31

Zapewniam wiele rozwiązań z opisami w tej odpowiedzi. Zapraszamy do zadawania pytań, jeśli coś jest niejasne
PS: Niestety ktoś połączył to na najwyższą odpowiedź bez udzielania kredytu.


Szybki i brudny roztwór:

Date.now() /1000 |0

OSTRZEŻENIE : IT może przerwa w 2038 r. I zwróć numery ujemne, jeśli wykonasz magię |0. Zamiast tego użyj Math.floor()

{X0}} Rozwiązanie:

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

Niektóre nerdy alternatywnie przez Derek 朕會 功夫 ZROBIONE Z komentarzy poniżej tej odpowiedzi:

new Date/1e3|0

Polyple, aby uzyskać Date.now() Praca:

Aby to pracować w IE, możesz to zrobić (Polyfills z MDN):

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

Jeśli nie dbasz o rok / dzień tygodnia / czas ratowania dziennego, możesz go usunąć i użyć tego po 2038 r.:

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

Niektóre wyjście, jak będzie wyglądać:

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 )

Oczywiście przełamuje czas ratowania dziennego, ale w zależności od tego, co budujesz, może być przydatne dla Ciebie, jeśli musisz wykonać operacje binarne na znacznikach czasu po Int32 złamie w 2038 roku.

Spowoduje to również powrócenie wartości ujemnych, ale tylko wtedy, gdy użytkownik tego komputera prowadzisz kod, jest zmieniając zegar swojego komputera co najmniej do 31 grudnia poprzedniego roku.


Jeśli chcesz po prostu znać czas względny z punktu, gdy kod został uruchomiony pierwszy, mógłbyś użyć czegoś takiego:

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

W przypadku, gdy używasz jQuery, można użyć $.now(), jak opisano w Dokumenty jQuery's , co sprawia, że polikflistą przestarzałe od $.now() wewnętrznie robi to samo: (new Date).getTime()

Jeśli jesteś po prostu zadowolony z wersji jQuery, rozważ aktualizację To odpowiedź odkąd tego nie znalazłem.


Teraz małe wyjaśnienie tego, co robi |0:

Dostarczając |, mówisz tłumaczowi, aby wykonać binarną lub działanie. Operacje bitowe wymagają liczby bezwzględnych, które zamawiają wynik dziesiętny z Date.now() / 1000 do całkowitego.

Podczas tej konwersji, decyzyjne są usuwane, powodując ten sam wynik, co przy użyciu Math.floor(), ale przy użyciu mniejszego kodu.

ostrzegł jednak: Konwertuje 64-bitową do podwójnej do 32-bitowej liczby całkowitej. Spowoduje to utratę informacji podczas radzenia sobie z ogromnymi liczbami. Znaczniki czasu pękną po 2038 r. Ze względu na 32-bitowy przepełnienie całkowitego.


Więcej informacji na temat Date.now Obserwuj ten link: Date.now() @ mdn

136
mgthomas99 4 kwiecień 2018, 15:46
var timestamp = Number(new Date()); // current time as number
93
aemkei 21 październik 2008, 13:00

jQuery zapewnia własną metodą, aby uzyskać znacznik czasu:

var timestamp = $.now();

(Poza tym właśnie implementuje (new Date).getTime() wyrażenie)

ref: http://api.jquery.com/jquery.now/ .

60
VisioN 15 marzec 2013, 14:19

Oprócz innych opcji, jeśli chcesz dateformat ISO, otrzymasz go bezpośrednio

console.log(new Date().toISOString());
48
Ruslan López 24 czerwiec 2016, 18:59
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
45
Ruslan López 24 czerwiec 2016, 18:48

Aby dodać, oto funkcja, aby zwrócić ciąg znaków w JavaScript. Przykład: 15:06:38

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;
}
43
live-love 21 wrzesień 2012, 19:46

Data , native obiekt w JavaScript, jest sposób, w jaki otrzymujemy wszystkie dane o czasie.

Wystarczy być ostrożnym w JavaScript Timestamp zależy od zestawu komputera klienckiego, więc nie jest to w 100% dokładnego znacznika czasu. Aby uzyskać najlepszy wynik, musisz uzyskać znacznik czasu z serwera serwera .

W każdym razie mój preferowany sposób używa wanilii. Jest to powszechny sposób na to w JavaScript:

Date.now(); //return 1495255666921

W MDN wspomniano jak poniżej:

Data.NOW () Metoda zwraca liczbę milisekund, które upłynęły 1 stycznia 1970 r. 00:00:00 UTC.
Ponieważ teraz () jest statyczną metodą daty, zawsze używasz go jako data.NOW ().

Jeśli używasz wersji poniżej ES5, {x0}} nie działa i musisz użyć:

new Date().getTime();
42
Alireza 5 lipiec 2019, 17:58

Obecnie - 2018.06.27 Podamy kilka porównania dla rozwiązań Pure JS. Może to być przydatne dla osób, które chcą zdobyć / mierzyć czas w JS w świetle / wydajny sposób (np. W przypadku aplikacji w czasie rzeczywistym, takich jak symulacje, gry itp.)

Testowany na MacOS High Sierra 10.13.3 na Chrome 67.0.3396.99 (64-bitowy), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit). Poniżej znajduje się zrzut ekranu Pokaż wyniki dla najszybszej przeglądarki (Safari):

enter image description here

Gdy obserwuję Date.now() był najszybszą metodą uzyskania znacznika do wszystkich trzech przeglądarek. Safari ma 19,2m operacje na sekundę, Firefox 16.1m, Chrome 7.8m.

new Date()*1 był najwolniejszy dla chromu (2,8 m) i Firefoksa (2,6 m). Number(new Date()) był najwolniejszy dla Safari (2,9 m).

Więc zwycięzca JS Code jest Date.now() i najszybsza przeglądarka jest Safari (2x szybciej, że Chrome!).

Możesz wykonać test na swoim komputerze tutaj: https://jsperf.com/timestamp-test-x.

36
Community 20 czerwiec 2020, 09:12

Jeden jeszcze nie widziałem

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

Inny, którego jeszcze nie widziałem

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
31
mgthomas99 4 kwiecień 2018, 16:10

Date.getTime() Metoda może być używana z Mały Tweak:

Wartość zwracana metodą Gettime jest liczba milisekund od 1 stycznia 1970 r. 00:00:00 UTC.

Podziel wynik o 1000, aby uzyskać dziennik czasu Unix, floor} w razie potrzeby:

(new Date).getTime() / 1000

Metoda Date.valueOf() jest funkcjonalnie równoważna Date.getTime(), co umożliwia stosowanie operatorów arytmetycznych w obiekcie daty, aby uzyskać identyczne wyniki. Moim zdaniem to podejście wpływa na czytelność.

27
Salman A 7 maj 2015, 09:10

Kod Math.floor(new Date().getTime() / 1000) można skrócić do new Date / 1E3 | 0.

Zastanów się na pomijanie bezpośrednie getTime() wywołanie i użycie | 0 jako zamiennik dla Math.floor() funkcja. Dobrze jest zapamiętać 1E3 jest krótszym ekwiwalentem dla 1000 (preferowane jest wielkie litery E niż małe litery, aby wskazać 1E3 jako stała).

W rezultacie otrzymasz następujące czynności:

var ts = new Date / 1E3 | 0;

console.log(ts);
26
Valentin Podkamennyi 27 marzec 2018, 06:08

Aby uzyskać znacznik czasu z rozdzielczością mikrosekundy, jest performance.now :

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

Może to na przykład wydajność 1436140826653.139, podczas gdy Date.now daje tylko 1436140826653.

22
iter 6 lipiec 2015, 00:01

Gorąco polecam użycie moment.js. Aby uzyskać liczbę milisekund, ponieważ UNIX EPOCH, DO

moment().valueOf()

Aby uzyskać liczbę sekund od UNIX EPOCH, DO

moment().unix()

Możesz także konwertować czasy tak:

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

Robię to cały czas. Nie ma planowanych funtów.

Aby użyć moment.js W przeglądarce:

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

Aby uzyskać więcej informacji, w tym inne sposoby instalacji i za pomocą momentu, zobacz ich Docs

22
FullStack 1 październik 2015, 07:28

Możesz użyć tylko

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

Uzyskać obecny znacznik czasu. Nie musisz nic robić więcej.

21
Ruslan López 24 czerwiec 2016, 18:48

Oto prosta funkcja do generowania znacznika czasu w formacie: MM / DD / YY 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())));
}
20
VisioN 3 lipiec 2013, 15:10
// 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>
20
Ruslan López 24 czerwiec 2016, 18:47

Wszelkie przeglądarki nie obsługują daty. Teraz, możesz użyć tego do uzyskania bieżącej daty:

currentTime = Date.now() || +new Date()
16
mr.boyfox 9 maj 2013, 06:53

Ten ma rozwiązanie: który konwertuje znacznik czasu UNIX na czas w JS spróbuj tego

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
14
Anoop P S 1 lipiec 2013, 06:47

Nauczyłem się naprawdę fajny sposób konwersji określonego obiektu daty do znacznika UNIX z kodu źródłowego Cookie jQuery pewnego dnia.

Oto przykład:

var date = new Date();
var timestamp = +date;
14
george 11 marzec 2015, 09:52

Jeśli chcesz, aby uzyskać podstawowy sposób na wygenerowanie znacznika czasu w węźle .Js to dobrze działa.

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

Nasz zespół wykorzystuje to do pamięci podręcznej w środowisku lokalnym. Wyjście jest /dist/css/global.css?v=245521377 gdzie 245521377 jest znacznik czasu generowany przez hrtime().

Mam nadzieję, że to pomoże, powyższe metody mogą również działać, ale stwierdziłem, że to najprostsze podejście do naszych potrzeb w węźle.

14
Kevin Leary 29 maj 2015, 13:40

To wydaje się działać.

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);
            }
};
14
Ronnie Royston 9 październik 2015, 02:03

Jeśli jest to dla celów logowania, możesz użyć Isostrustring

new Date().toISOString()

"2019-05-18t20: 02: 36.694Z"

14
cenkarioz 18 maj 2019, 20:43

Dla Lodash i UnderCord użytkownicy, użyj _.now.

var timestamp = _.now(); // in milliseconds
12
Muhammad Reda 30 marzec 2015, 08:40

moment.js może abstrakcjonistycznie dużo bólu w radzeniu sobie z datami JavaScript.

Zobacz: http://momentjs.com/docs/#/displaying/unix-timestamp/.

moment().unix();
10
Rimian 6 marzec 2015, 00:33

Od tego, co do pisania, najwyższa odpowiedź wynosi 9 lat, a wiele się zmieniło od tego czasu - nie tylko mamy w pobliżu uniwersalnego wsparcia dla rozwiązania bez hacky:

Date.now()

Jeśli chcesz być absolutnie pewny, że nie pęka to w niektórych starożytnych (pre Pre IE9), możesz umieścić go za pomocą

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

Spowoduje to powrót milisekund od czasu epoki, oczywiście, a nie sekundy.

Dokumentacja MDN w dniu

9
Olemak 14 grudzień 2017, 10:09

Bardziej prostszy sposób:

var timeStamp=event.timestamp || new Date().getTime();
8
Vicky Gonsalves 26 październik 2013, 03:51