Tarih zaman damgasına nasıl dönüştürülür?


165

Tarihi zaman damgasına dönüştürmek istiyorum, girdim 26-02-2012. kullandım

new Date(myDate).getTime();

NaN yazıyor .. Bunu dönüştürmek isteyen var mı?



date.js kütüphanesine bir göz atmak isteyebilirsiniz: datejs.com
rsbarro

1
Date(myDate).getTime()(Kod olarak işaretlediğiniz şey) kullandınız mı veya bundan önce "yeni" kelimesi kodun bir parçası mı demekti? Ne kadar çok çaba harcarsanız, yanıtlarınız o kadar iyi olur.
TJ Crowder

@rsbarro: Artık bakımlı görünmüyor (ve olağanüstü hatalar var). Yine de MomentJS oldukça iyi görünüyor.
TJ Crowder

@TJCrowder date.js kullandım ve bunun için ihtiyacım olan şey için çalıştı, ancak haklısın, bir süredir aktif olarak çalışmadı. Ben momentjs kontrol edecektir. Teşekkürler!
rsbarro

Yanıtlar:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Güncelleme:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (Chrome, FF, Opera, IE ve Safari'de test edildi).


Ne yazık ki, bu döndüğü gibi Safari5'te çalışmaz NaN. Safari'de new Date(year, month, day);bu örnekle ilgili diğer olası new Date(myDate[2], myDate[1], myDate[0]);
kurucuyu

13
Tarih dizesini "Avrupa" dan "Amerikan" biçimine dönüştürmek yerine, tarih dizeleri YYYY-MM-DDtarafından anlaşılması garanti edilen Date()ve genel olarak en uyumlu format olan ISO 8601 biçimine ( ) dönüştürmek daha iyidir .
Walter Tross

3
Not: new Date(newDate).getTime()milisaniye çözünürlükte bir zaman damgası üretir.
h7r

3
Saniyeler için: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

Bu işlevi deneyin, Date.parse () yöntemini kullanır ve herhangi bir özel mantık gerektirmez:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));

25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();

24

bu yeniden düzenlenmiş kod bunu yapacak

let toTimestamp = strDate => Date.parse(strDate)

bu ie8- hariç tüm modern tarayıcılarda çalışır


10

Burada iki problem mevcut. İlk olarak getTime'ı yalnızca tarihin bir örneğinde çağırabilirsiniz. Yeni Tarihi parantez içine almanız veya değişkene atamanız gerekir.

İkinci olarak, uygun bir biçimde bir dize geçirmeniz gerekir.

Çalışma örneği:

(new Date("2012-02-26")).getTime();

1
Tarihi anında bir parantez içine almanıza gerek yoktur. Yalnızca uygun bir dize biçimi gerekir.
maswerdna

5

Eğer tarih rakamı ve değişikliği geri sadece ihtiyaç -olan ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

Senin durumunda:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

PS İngiltere yerel ayarı burada önemli değil.


Bu tarih biçimi de geçersizdir ve güvenilir bir şekilde tarayıcılar arası ve yerel ayarlar arasında çalışmaz (örneğin, benim için İngiltere yerel ayarına sahip Chrome'da benim için geçerli değildir). Bir biçim önerecekseniz, gerçekten çalışmak için belgelenmiş bir biçim önerebilirsiniz.
TJ Crowder

Örneği developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… adresinden alıyorum . Sadece ipi bırakmayı unuttum. Şimdi çalışıyor.
antonjs

2
Tamam, en azından şimdi yukarıdaki kod geçersiz bir tarih biçimi kullanmıyor - iki ayrı nedenden dolayı sadece yanlış tarih veriyor. Yukarıda 2 Mart 2014 tarihini tanımladınız (saha siparişini bozdunuz). Alanlar doğru sırada olsaydı , 26 Mart 2012 tarihini tanımlarsınız (ay değerleri sıfırdan başlar). Ancak OP'nin bir dizi değil, bir dizesi olduğundan, bu sorunları ele alsanız bile bu kadar kullanışlı değildir.
TJ Crowder

@TJ Crowder önerileriniz için teşekkürler. Dize bir sayıya dönüştürme dedi kod sabit. Mersi.
antonjs

2
İlk kod örneği hala yanlış ve Numbera ile başlayan dizelerde 0bazı motorlarda sorunlu - parseIntbir sayı tabanı kullanın ve belirtin.
TJ Crowder

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

4

(ISO) tarihini Unix zaman damgasına dönüştürmek için , gerektiğinden 3 karakterden daha uzun bir zaman damgası buldum, bu yüzden yılım 50 bin civarında bir yerdeydi ...

1000'e kadar ayırmak zorunda kaldım: new Date('2012-02-26').getTime() / 1000


3

Biçiminde okunabilir zaman damgası almak isteyenler için, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Kullanım örneği: bir yedek dosya uzantısı. /my/path/my.file.js.20190220


3

Buraya güncel zaman damgasını aramak için geldiyseniz

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

Dizeniz, Datenesnenin işlemesi için belirtildiği bir biçimde değil . Bunu kendiniz ayrıştırmanız, MomentJS veya daha eski gibi bir tarih ayrıştırma kütüphanesi kullanmanız (ve şu anda söyleyebildiğim kadarıyla bakım yapılmaması gerekir ) DateJS'yi veya 2012-02-29sormadan önce doğru biçime (ör. ) Masaj yapmanız gerekir.Date ayrıştırmayı gerekir. .

Neden alıyorsunuz NaN: new Date(...)Geçersiz bir dizeyi işlemek Dateistediğinizde, geçersiz bir tarihe ( new Date("29-02-2012").toString()döndürme "Invalid date") ayarlanmış bir nesne döndürür . getTime()Bu durumda bir tarih nesnesini çağırmak geri döner NaN.


@benvds: Harika, teşekkürler. Her ne kadar "Ayrıca, DOM için tahribatsız" yorum bulmak biraz garip ... Ne demek istediğini Date(DOM ile ilgisi yoktur) nesneyi değişmediğini bekliyoruz .
TJ Crowder

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

Yanıtlar diğer geliştiriciler tarafından sağlandı, ancak kendi yolumla, bunu kullanıcı tanımlı herhangi bir işlev oluşturmadan aşağıdaki gibi anında yapabilirsiniz:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.