Soru JavaScript'te bir zaman damgasını nasıl alırsınız?


JavaScript’te nasıl zaman damgası alabilirim?

Unix'in zaman damgasına benzer bir şey, yani geçerli saati ve tarihi temsil eden tek bir sayı. Bir sayı ya da bir dizi olarak.


3367
2017-10-21 09:29


Menşei


JS'de 64bit zaman damgası nasıl edinilir? - Alexander Mills
@AlexanderMills JavaScript 64bit tamsayıları desteklemediğinden, iki 32 bit tam sayı almanız gerekir. Başka bir soru sor. - wizzwizz4


Cevaplar:


Kısa ve Snazzy:

+ new Date()

Tek bir operatör gibi plus tetikler valueOf yönteminde Date nesne ve zaman damgası döndürür (herhangi bir değişiklik olmadan).

Detaylar:

Hemen hemen tüm mevcut tarayıcılarda kullanabilirsiniz Date.now() UTC zaman damgasını almak için milisaniye; Bunun dikkate değer bir istisnası IE8 ve daha erken (bkz. uyumluluk tablosu).

Bunun için kolayca bir shim yapabilirsiniz:

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

Zaman damgasını almak için saniye, kullanabilirsiniz:

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

Veya alternatif olarak şunları kullanabilirsiniz:

Date.now() / 1000 | 0

Biraz daha hızlı olmalı, ama aynı zamanda daha az okunabilir (ayrıca bu cevabı gör).

Kullanmanı tavsiye ederim Date.now() (uyumluluk şimiyle). Biraz daha iyi çünkü daha kısa ve yeni bir şey yaratmıyor Date nesne. Ancak, bir shim & maksimum uyumluluk istemiyorsanız, zaman damgasını almak için "eski" yöntemini kullanabilirsiniz. milisaniye:

new Date().getTime()

Daha sonra bu şekilde saniyelere dönüştürebilirsiniz:

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

Ve ayrıca kullanabilirsiniz valueOf Yukarıda gösterdiğimiz yöntem:

new Date().valueOf()

Milisaniye cinsinden zaman damgası

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


4159
2017-10-21 09:32



Bir diğer önemli istisna node.js. Buraya düğümde aynı şeyi yapmak isteyen Google'dan geldim - Milan Babuškov
Alışkanlık Date.now() / 1000 | 0 muzdarip Yıl 2038 problemi? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496 - gengkev
hatta Math.floor kullanarak yapamazsınız. ~~(Date.now() / 1000) - code ninja
@ MilanBabuškov ancak node.js desteği var Date.now() - OrangeDog
Süre +new Data zeki, diğer devlerle okunamaz. Date.now() daha açık ve herkesin neler olduğunu bilmesini sağlıyor. - Harry Sadler


Bunu beğendim, çünkü küçüktür:

+new Date

Bunu da seviyorum, çünkü bu sadece kısa ve modern tarayıcılarla uyumlu ve 500'den fazla kişi bunun daha iyi olduğuna oy verdi:

Date.now()

432
2018-02-18 00:33



Bu seçenek kötü bir fikirdir. Kolayca gözden kaçırılır, yazım hatası gibi görünür ve gerçekte bir dil yan etkisine dayanır. Kötü kod görüyorum. - inanutshellus
@Billy Hatırladığım kadarıyla, önerilen iki çözümde her zaman 1 MB zaman damgasını hesapladım ve ortalama çalışma zamanını hesapladım. Firefox ve Chrome'da çalıştırdım, her iki tarayıcıda da getTime daha hızlı. Dedi ki, (marjinal olarak) daha yavaş olsa bile new Date().getTime(). Neyse ki benim için daha hızlı çözüm zaten okunaklı bir çözüm! - inanutshellus
@ FabrícioMatté ile anlaştı. Unary operatör davranışı ilkel olmayabilir, ancak üzerinde fırçalamadıysanız, birçok takımda etkili bir şekilde çalışmayı beklemeyin. - Jason T Featheringham
@Niklaus Bu, onu başka bir dizeyle birleştirdiğinizden kaynaklanıyor. Bu durumda, new Date().toString() denir. - kirb
meraktan ne olduğu +operatör bir dizgeye benzetmek için mi yapıyor? - Grundizer


JavaScript, çağlardan beri milisaniye sayısıyla çalışır, oysa diğer dillerin çoğu saniyelerle çalışır. Milisaniye ile çalışabilirsin ama PHP demek için bir değer geçtiğinde PHP'nin yerel işlevleri muhtemelen başarısız olur. Bu yüzden, her zaman saniyeler kullanıyorum, milisaniye değil.

Bu size bir Unix zaman damgası verecektir (saniye cinsinden):

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

Bu, çağdan bu yana milisaniye verir (Unix zaman damgası değil):

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

230
2018-05-11 22:27



PHP, microtime () işleviyle kendisini kullandığı için milisaniye ile iyi çalışmalıdır. - Nico Burns
Microtime () mevcutken, php'deki çoğu zamanla ilgili işlevler, zaman damgasının milisaniye cinsinden değil saniyeler içinde olmasını bekler. Üstelik, microtime () bir float döndürür (true iletirseniz), ondalık kısım bir saniyenin kesirleri (mikro saniye için doğru) olduğunda, newDate (). GetTime (), yalnızca milisaniye olarak sayıldığı bir int döndürür. çağ. Örneğin, (php) eğer zemin katını çağırırsanız (mikrotime (true)), bu, saniye cinsinden ve mikro veya milisaniye cinsinden değil, çağrı süresi () ile aynı olacaktır. Yukarıdaki gibi 1000'e bölünmesi, bunun en kolay çözümdür. - gregghz
Yuvarlak yerine, zemin kullanın. 700 ms hala ikinci değil - Anagmate


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

time();

126
2017-10-21 10:05



Neden || Şebeke? Date.now () tüm tarayıcılarda mevcut değil mi? - Chris Noe
Görünüşe göre, ben modüllerdeki kodu buldum - Staale
Date.now () JavaScript 1.5'ten ve IE 8'de desteklenmiyor. - Søren Løvborg
Date.now yöntemini desteklemek için güncelleştirilmemiş olan motorlar, aşağıdaki diziyi kullanarak yokluğu üzerinde çalışabilir: if (! Date.now) {Date.now = function now () {return + (new Date); }; } - Per Quested Aronsson
IE, tamamen kanserdir. - SkuraZZ


Bu cevapta açıklamalarla çoklu çözümler sağlarım. Bir şey belli değilse soru sormaktan çekinmeyin
Not: ne yazık ki birisi, kredi vermeden bunu en iyi cevapla birleştirdi.


Hızlı ve kirli bir çözüm:

Date.now() /1000 |0

Uyarı: o belki 2038’de kırın ve negatif sayıları iade edin. |0 büyü. kullanım Math.floor() bunun yerine o zaman


95
2017-07-12 07:15



0, Math.floor () 'a benzer, çünkü bu biraz işlemdir (floatlarla çalışmaz). bir fonksiyon çağrısı olmadığı için Math.floor () 'dan bile daha hızlıdır, yerel bir javascript operatördür. - GottZ
Date.now() referans: developer.mozilla.org/en-US/docs/JavaScript/Reference/... - Web_Designer
@Christophe neden böyle düşünüyorsun? IE düzeltmesi nedeniyle? Bu bölüm dışında oldukça basit ve özelleştirilebilir düşünüyorum. - GottZ
polyfills / shims karmaşık değildir. Bunlar, 9 farklı tarayıcı versiyonunu desteklemenin ve endüstrinin benimsedikleri ve hangi standartlara uyduklarını seçmeye karar vermelerinin sonucudur. - rlemon
Referans için alabilirsiniz en kompakt new Date/1e3|0. - Derek 朕會功夫


var timestamp = Number(new Date()); // current time as number

69
2017-10-21 13:00





jQuery sağlar kendi yöntemi zaman damgasını almak için:

var timestamp = $.now();

(bunun yanı sıra sadece uygular (new Date).getTime() sentezleme)

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


50
2018-03-15 14:19



jQuery ayrıca, farklı JavaScript API'ları ile çapraz tarayıcı uyumluluk sorunlarını da ele alacaktır. - Henry Heleine
@VisioN Node.js.'de zaman damgaları yapmanın bir yolunu aradım. Stackoverflow'ta bir javascript sorusu buldum ve jQuery'de bir cevap alıyorum, bu da yardımcı olmuyor. Javascript ve jQuery iki şeydir. Orada her javascript çerçevesine cevap verirsek, sonuç olarak sonsuz sayıda cevapla sonuçlanırız, bu da Q / A'nın yığın akışındaki felsefesine aykırıdır. Ayrıca: i.stack.imgur.com/Ledgt.gif : D - Pierre Arlaud
@PierreArlaud Ne tür bir felsefe hakkında konuşuyorsunuz? jQuery bir dünya Nr. Saf JavaScript ile yazılmış 1 kütüphane, ana hedef çapraz tarayıcı yardımcı yöntemleri sağlamaktır. Cevapdan da görebileceğiniz gibi jQuery kullanır (new Date).getTime() Yaklaşım, dolayısıyla, IE6'da bile kullanılabilecek kadar güvenlidir. Date.now(). Aksi takdirde, bir web sitesi geliştiriyorsanız ve jQuery'yi neden kısa bir yararlı çözüm kullanmıyorsanız kullanın $.now() zamanınızı beklemek ve saf JS'de evrensel bir kod aramak yerine. Ve bu, burada verilen diğer aynı içerik cevaplarından en azından farklıdır. - VisioN
@VisioN javascript'in tarayıcıda kullanılması gerektiğini kim söyledi? - Pierre Arlaud
@PierreArlaud Ve kim bu soru sadece NodeJS hakkında olduğunu söyledi? - VisioN


Sadece eklemek için, burada Javascript'te bir zaman damgası dizesi döndürmek için bir işlev. Örnek: 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;
}

36
2017-09-21 19:12



OP bir tamsayı zaman damgası soruyor; Bu, zamanın dize gösterimidir. - Brad Koch
"Unix'in zaman damgasına benzer, yani şu anki zamanı temsil eden tek bir sayı" - Brad Koch
Zaman gösterecek bir kodum vardı ama Avustralya'nın bazı bölümleri tam bir tarih gösteriyordu, bu senaryo beni kırıp doğru göstermeme yardımcı oldu. (Bunun için +1) - Syfer


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


34
2018-04-30 16:53



Bu eşittir +new Date.. :) - Kenan Sulayman
sadece yap Date.now() - Orlando
@Orlando diğer cevaplara bakın, şimdiki sorun () tarayıcı desteği - Christophe
@Christophe sadece basit bir polyfill yapın, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... - Orlando
@Orlando tam olarak, sadece Date.now () yapmayın - Christophe


Diğer seçeneklere ek olarak, bir dateformat ISO istiyorsanız, doğrudan alabilirsiniz

console.log(new Date().toISOString());


29
2018-01-29 15:08



Soru sorulduğunda bir tam sayı döndürmez! - Alex Ventura
@ Dize dateformat ISO ile birAlexVentura, bir tarih nesnesini başlatabilir ve aralarında çıkartabilirsiniz. Örneğin: new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z") - Joaquinglezsantos


Henüz görmedim

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

Henüz görmediğim bir başka şey

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

22
2018-03-31 08:18



Date.now() /1000 |0 aynısını yapar ve daha önce cevaplandırılmıştır - GottZ
iyi. eminim düzenledim Math.floor() içine ancak aynı etkiye sahip olduğunu netleştirmek için |0. Seni incitmek istemedim ya da bir şey. Ben sadece cevabınızın bir şekilde var olduğunu söylemek istedim. Verilen tüm cevaplara bakarak, bu şekilde bir kat daha vardır. - GottZ
Tüm Lodash kütüphanesini kullanmak için kullanıyorum. _.now() biraz overkill. Kullanmanız gereken Lodash işlevini yalnızca içe aktarmanızı öneririm (bu durumda, NPM'de _.now ()), ancak paketlerini sadece kullanımdan yana kullandılar Date.now(). - mgthomas99