JavaScript'te nasıl zaman damgası alabilirim?
Unix zaman damgasına benzer bir şey , yani geçerli saati ve tarihi temsil eden tek bir sayı. Sayı veya dize olarak.
JavaScript'te nasıl zaman damgası alabilirim?
Unix zaman damgasına benzer bir şey , yani geçerli saati ve tarihi temsil eden tek bir sayı. Sayı veya dize olarak.
Yanıtlar:
+ new Date()
Benzeri tekli bir işleç nesnedeki yöntemi plus
tetikler ve zaman damgasını döndürür (herhangi bir değişiklik yapmadan).valueOf
Date
Detaylar:
Neredeyse tüm mevcut tarayıcılarda Date.now()
UTC zaman damgasını milisaniye olarak almak için kullanabilirsiniz ; bunun dikkate değer bir istisnası IE8 ve öncesi'dir ( uyumluluk tablosuna bakın ).
Bununla birlikte, bunun için kolayca bir şim yapabilirsiniz:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
Zaman damgasını saniyeler içinde almak için şunları kullanabilirsiniz:
Math.floor(Date.now() / 1000)
Veya alternatif olarak şunları kullanabilirsiniz:
Date.now() / 1000 | 0
Bu biraz daha hızlı, aynı zamanda daha az okunabilir olmalıdır (ayrıca bu cevaba bakınız ).
Date.now()
(Uyumluluk şim ile) kullanmanızı tavsiye ederim . Biraz daha iyi çünkü daha kısa ve yeni bir Date
nesne yaratmıyor . Ancak, bir şim ve maksimum uyumluluk istemiyorsanız, zaman damgasını milisaniye olarak almak için "eski" yöntemi kullanabilirsiniz :
new Date().getTime()
Hangi sonra bu gibi saniye dönüştürebilirsiniz:
Math.round(new Date().getTime()/1000)
Ayrıca valueOf
yukarıda gösterdiğimiz yöntemi de kullanabilirsiniz :
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());
Date.now() / 1000 | 0
muzdarip olmayacak mısınız? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
Akıllı olsa da, diğer geliştiriciler tarafından okunamaz. Date.now()
daha nettir ve herkesin neler olduğunu bilmesini sağlar.
Bunu beğendim, çünkü küçük:
+new Date
Bunu da seviyorum, çünkü aynı derecede kısa ve modern tarayıcılarla uyumlu ve 500'den fazla kişi bunun daha iyi olduğuna karar verdi:
Date.now()
new Date().getTime()
. Neyse ki benim için, daha hızlı çözüm zaten okunaklı çözüm!
new Date().toString()
denir.
+
operatörün dize gibi çıkması için ne yapıyor?
JavaScript çağdan bu yana geçen milisaniye sayısı ile çalışır, diğer diller ise saniyeler içinde çalışır. Milisaniye ile çalışabilirsiniz, ancak PHP demek için bir değer iletir geçmez, PHP yerel işlevleri muhtemelen başarısız olacaktır. Bu yüzden milisaniyeyi değil, her zaman saniyeleri kullandığımdan emin olmak için.
Bu size bir Unix zaman damgası verecektir (saniye cinsinden):
var unix = Math.round(+new Date()/1000);
Bu, çağdan beri milisaniye verir (Unix zaman damgası değil):
var milliseconds = new Date().getTime();
Unix timestamp
vs Seconds since the Epoch
. Bu ikisinin aynı anlama gelmesi gerekmez mi?
var time = Date.now || function() {
return +new Date;
};
time();
Bu cevapta açıklamaları olan birden fazla çözüm sağlıyorum. Bir şey belirsizse soru sormaktan çekinmeyin
PS: ne yazık ki birisi kredi vermeden bunu en iyi cevapla birleştirdi.
Hızlı ve kirli çözüm:
Date.now() /1000 |0
Uyarı : Bu belki 2038 yılında kırmak ve bunu yaparsanız negatif sayıları dönmek
|0
sihirli. KullanMath.floor()
o zaman bunun yerine
Math.floor()
çözüm:
Math.floor(Date.now() /1000);
Bu cevabın altındaki yorumlardan Derek 朕 會 功夫 tarafından yapılan bazı asosyal alternatif :
new Date/1e3|0
Çok amaçlı Date.now()
çalışmaya başlayın :
IE'de Çalıştırmak için bu (dan polyfill yapabileceği MDN'yi ):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Yıl / gün / gün / gün ışığından yararlanma zamanını umursamıyorsanız, bunu kesip 2038'den sonra kullanabilirsiniz:
var now = (function () {
var year = new Date(new Date().getFullYear().toString()).getTime();
return function () {
return Date.now() - year
}
})();
Nasıl görüneceğinin bazı çıktıları:
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 )
Tabii ki yaz saatini kıracak, ancak ne inşa edeceğinize bağlı olarak, int32'nin 2038'de kırılmasından sonra zaman damgalarında ikili işlemler yapmanız gerekiyorsa bu sizin için yararlı olabilir.
Bu ayrıca negatif değerler döndürür, ancak yalnızca kodunuzu çalıştırdığınız bilgisayarın kullanıcısı PC'sinin saatini en az bir önceki yılın 31 Aralık tarihine değiştirirse.
Kodun ilk çalıştırıldığı andan itibaren göreceli zamanı bilmek istiyorsanız, şöyle bir şey kullanabilirsiniz:
var relativeTime = (function () {
var start = Date.now();
return function () {
return Date.now() - start
}
})();
JQuery kullanıyorsanız $.now()
, dahili olarak aynı şeyi yaptığından , çoklu dolguyu geçersiz kılan jQuery'nin Dokümanlarında açıklandığı gibi kullanabilirsiniz $.now()
:(new Date).getTime()
JQuery'nin sürümünden memnunsanız , kendim bulamadığım için bu cevabı iptal etmeyi düşünün .
Şimdi ne işe yaradığına dair küçük bir açıklama |0
:
Sağlayarak |
, yorumlayıcıya ikili VEYA işlemi yapmasını söylersiniz. Bit işlemleri, ondalık sonucu Date.now() / 1000
bir tamsayıya dönüştüren mutlak sayılar gerektirir .
Bu dönüşüm sırasında, ondalık sayılar kaldırılır ve sonuçla aynı sonucu verir, Math.floor()
ancak daha az kod kullanır.
Yine de uyarılmalıdır: 64 bitlik bir ikiliyi 32 bitlik bir tam sayıya dönüştürecektir. Bu, büyük sayılarla uğraşırken bilgi kaybına neden olacaktır. 32 bit tamsayı taşması nedeniyle 2038'den sonra zaman damgaları kırılacaktır.
Hakkında daha fazla bilgi Date.now
için şu bağlantıyı izleyin: Date.now()
@ MDN
Date.now()
başvuru: developer.mozilla.org/tr-TR/docs/JavaScript/Reference/…
new Date/1e3|0
.
jQuery zaman damgasını almak için kendi yöntemini sağlar :
var timestamp = $.now();
(ayrıca (new Date).getTime()
ifadeyi uygular )
parseInt
Sonuçta ortaya çıkan değer her zaman bir olacağından , buna gerek yoktur Number
.
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date
.. :)
Date.now()
Diğer seçeneklere ek olarak, bir tarih biçimi ISO istiyorsanız, doğrudan alabilirsiniz
console.log(new Date().toISOString());
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Sadece toplamak için, 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;
}
Tarih , JavaScript'teki yerel bir nesne , zamanla ilgili tüm verileri alma yöntemimizdir.
JavaScript'te zaman damgasının istemci bilgisayar setine bağlı olduğuna dikkat edin, bu yüzden% 100 doğru zaman damgası değildir. En iyi sonucu almak için sunucu tarafından zaman damgasını almanız gerekir .
Her neyse, benim tercih ettiğim yol vanilya kullanmak. Bu, JavaScript'te yapmanın yaygın bir yoludur:
Date.now(); //return 1495255666921
MDN'de aşağıda belirtilmiştir:
Date.now () yöntemi, 1 Ocak 1970 00:00:00 UTC'den bu yana geçen milisaniye sayısını döndürür.
Now () yöntemi Date'nin statik bir yöntemi olduğundan, bunu her zaman Date.now () olarak kullanırsınız.
ES5'in altında bir sürüm kullanıyorsanız, Date.now();
çalışmaz ve kullanmanız gerekir:
new Date().getTime();
Henüz görmediğim biri
Math.floor(Date.now() / 1000); // current time in seconds
Henüz görmediğim bir diğeri
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Date.now() /1000 |0
aynı şeyi yapar ve daha önce cevaplanmıştır
Math.floor()
içine düzenlenmiş ama sadece aynı etkisi olduğunu açıklığa kavuşturmak için |0
. Sana ya da hiçbir şeye zarar vermek istemedim. Sadece cevabınızın bir şekilde var olduğunu söylemek istedim. verilen tüm cevaplara bakıldığında zemini bir şekilde fark eden bazıları vardır.
_.now()
için içe aktarmanın biraz abartılı olduğunu düşünüyorum . Sadece kullanmanız gereken Lodash işlevselliğini içe aktarmanızı öneririm ( bu durumda NPM'de _.now () ), ancak paketlerini sadece kullanmak için kullanımdan kaldırmışlardırDate.now()
.
Date.getTime()
Yöntem, küçük bir çimdik ile kullanılabilir:
GetTime yöntemi tarafından döndürülen değer, 1 Ocak 1970 00:00:00 UTC değerinden bu yana geçen milisaniye sayısıdır.
floor
Gerekirse Unix zaman damgasını almak için sonucu 1000'e bölün :
(new Date).getTime() / 1000
Date.valueOf()
Usul fonksiyonel olarak eşdeğer olan Date.getTime()
mümkün aynı sonuçları elde etmek için tarih nesnesinde aritmetik işlemler kullanmak yapar. Bence bu yaklaşım okunabilirliği etkiler.
new Date().getTime() / 1000
()
sonra new Date
ve .getTime()
yana /
irade yine bir sayıya tarihi nesne attı.
Kod Math.floor(new Date().getTime() / 1000)
kısaltılabilir new Date / 1E3 | 0
.
Doğrudan getTime()
çağrıyı atlamayı ve işlev | 0
yerine geçmeyi düşünün Math.floor()
. Hatırlamakta fayda var 1E3
, bunun için daha kısa bir eşdeğerdir 1000
(E harfi 1E3
sabit olarak belirtmek için küçük harften daha çok tercih edilir ).
Sonuç olarak aşağıdakileri elde edersiniz:
var ts = new Date / 1E3 | 0;
console.log(ts);
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 bayt;
Math.floor()
tarafından |0
"açık ve anlaşılır" bu kodu yapıyor. Değiştirerek 1 byte kaydetmek için noktasıdır bana ne açıklayın 1000
tarafından 1E3
. Bu gülünç. Kötü kod görüyorum.
Bugün - 2020.04.23 Seçilen çözümler için testler yapıyorum. Chrome 81.0, Safari 13.1, Firefox 75.0 üzerinde MacOs High Sierra 10.13.6 üzerinde test yaptım
Date.now()
(E), Chrome ve Safari'de en hızlı ve Firefox'ta ikinci hızlıdır ve bu hızlı çapraz tarayıcı çözümü için muhtemelen en iyi seçimdirperformance.now()
Şaşırtıcı olan Çözüm (G), Firefox'taki diğer çözümlerden 100 kat daha hızlı, ancak Chrome'da en yavaşChrome kelimesi için sonuçlar
BURADA makinenizde test yapabilirsiniz
Testlerde kullanılan kod aşağıdaki snippet'te sunulmuştur
performance.now()
Damga açısından en doğru olması gerektiği için test ettiyseniz ilgilenirim .
privacy.reduceTimerPrecision
, sonuçları en yakın milisaniyeye yuvarlayan Firefox'un bir sonucu olabilir . Ayrıca varsayılan olarak etkindir ancak devre dışı bırakılabilir. developer.mozilla.org/tr-TR/docs/Web/API/Performance/now
Kullanmanızı tavsiye ederim moment.js
. UNIX döneminden bu yana geçen milisaniye sayısını elde etmek için,
moment().valueOf()
UNIX döneminden bu yana geçen saniye sayısını almak için şunu yapın:
moment().unix()
Ayrıca zamanları şu şekilde dönüştürebilirsiniz:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
Bunu her zaman yaparım. Hiçbir cinas amaçlanan.
moment.js
Tarayıcıda kullanmak için:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
MomentJS'yi kurmanın ve kullanmanın diğer yolları da dahil olmak üzere daha fazla ayrıntı için belgelerine bakın
Mikrosaniye çözünürlüklü bir zaman damgası için performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
Bu sadece verimi 1436140826653.139
verirken, örneğin verimi verebilir .Date.now
1436140826653
Sadece kullanabilirsiniz
var timestamp = new Date().getTime();
console.log(timestamp);
geçerli zaman damgasını almak için. Ekstra bir şey yapmaya gerek yok.
Zaman damgası biçiminde oluşturmak için basit bir işlev: aa / gg / yy ss: 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())));
}
(new (chain (-date) (to-i-s-o-string)))
.
// 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>
Date.now'u desteklemeyen tarayıcılar, bunu geçerli tarih saatini almak için kullanabilirsiniz:
currentTime = Date.now() || +new Date()
Date.now
çağırmak denemeden önce, aslında (bir işlev ve bir) bulunmaktadır: currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.
Geçen gün JQuery Cookie'nin kaynak kodundan belirli bir Date nesnesini Unix zaman damgasına dönüştürmenin gerçekten harika bir yolunu öğrendim .
İşte bir örnek:
var date = new Date();
var timestamp = +date;
Node.js'de bir zaman damgası oluşturmak için temel bir yol istiyorsanız, bu iyi çalışır.
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
Ekibimiz bunu bir localhost ortamında önbellek bozmak için kullanıyor. Çıktı, tarafından oluşturulan zaman damgasının /dist/css/global.css?v=245521377
bulunduğu yerdir .245521377
hrtime()
Umarım bu yardımcı olur, yukarıdaki yöntemler de işe yarayabilir, ancak bunu Node.js'deki ihtiyaçlarımız için en basit yaklaşım olarak buldum.
Bu işe yarıyor gibi görünüyor.
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 , Javascript Dates ile uğraşırken çok acı çekebilir .
Bkz. Http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
moment().valueOf()
. Cevabımı gör.
Bunu yazarken, en iyi cevap 9 yaşında ve o zamandan beri çok şey değişti - en azından, hacky olmayan bir çözüm için neredeyse evrensel desteğe sahibiz:
Date.now()
Bunun bazı eski (ie9 öncesi) tarayıcılarda kırılmayacağından kesinlikle emin olmak istiyorsanız, aşağıdaki gibi bir çekin arkasına koyabilirsiniz:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Bu, devir süresinden bu yana saniyeler değil, milisaniye dönecektir.
daha basit bir yol:
var timeStamp=event.timestamp || new Date().getTime();
event
geldiğini biliyorum . Bir cevap yazmak yerine, çözme şeklinizi daha iyi açıklamanız gerekir. Lütfen!