İnsan tarafından okunabilir biçime zaman damgası


90

Javascript kullanarak unix zaman damgasını insan temsiline dönüştürürken garip bir sorun yaşıyorum

İşte zaman damgası

1301090400

Bu benim javascript

var date = new Date(timestamp * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDay();
var hour    = date.getHours();
var minute  = date.getMinutes();
var seconds = date.getSeconds();  

Sonuçların 2011 2, 25 22 00 00 olmasını bekliyordum. Ama 2011, 2, 6, 0, 0, 0 Neyi özledim?



Benim yaptığımla aynı
georgevich

Bunu Firefox Firebug konsolunda denedim ve beklenen sonucu aldım. Hangi tarayıcıyı / işletim sistemini kullanıyorsunuz?
andrewmu

Bir jsfiddle oluşturdum ve iyi çalışıyor gibi görünüyor: jsfiddle.net/9SUqX (Opera'da test ettim)
James Hulse

Yanıtlar:


102

getDay()haftanın gününü döndürür. Tarihi almak için kullanın date.getDate(). getMonth()ayı alır, ancak ay sıfır tabanlıdır, bu nedenle kullanmak getMonth()+1size doğru ayı vermelidir. Saat burada 23 olsa da burada zaman değeri iyi görünüyor (GMT + 1). Evrensel değerler istiyorsanız UTC, yöntemlere ekleyin (örneğin date.getUTCFullYear(), date.getUTCHours())

var timestamp = 1301090400,
date = new Date(timestamp * 1000),
datevalues = [
   date.getFullYear(),
   date.getMonth()+1,
   date.getDate(),
   date.getHours(),
   date.getMinutes(),
   date.getSeconds(),
];
alert(datevalues); //=> [2011, 3, 25, 23, 0, 0]


7
@george hiçbir şeyi kaçırmazsın. Bu değerler tam sayıdır, bu nedenle "00" gibi bir değere sahip olamaz. Örneğin, kendiniz kolayca ekleyebilirsinizminute = (minute < 10 ? "0" : "") + minute;
Gölge Sihirbazı Aşı yapıyor

@georgevich: hangi saat dilimindesiniz? Kullanırsanız ne olur date.getUTCHours()?
KooiInc

1
GMT + 2 date.getUTCHours () sonucunun 19 olduğunu
georgevich

GMT + 2, yani 22 saat evrensel saat = 0 saat sizin zamanınız. UTC değerlerini kullanan bir jsfiddle: jsfiddle.net/EZFG9 .
KooiInc

48
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

unixtimeSql db'niz tarafından döndürülen saat nerede . İşe yarayacaksa işte bir keman .

Örneğin, geçerli saat için kullanmak:

document.write( new Date().toUTCString() );


Bu yanıtı buldum ve burada kabul edilen yanıt [* .toString ()] yararlı olacak: stackoverflow.com/questions/13622142/… İşte bir özet
Victoria Stuart

1
"unixtime is undefined"buraya geliyorum
Katie

1
Her neyse, kolayca oneliner'da açılabilirnew Date(1480966325 * 1000).toUTCString()
Rozkalns

9

işte kooilnc'in cevabı w / padded 0'lar

function getFormattedDate() {
    var date = new Date();

    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = (month < 10 ? "0" : "") + month;
    day = (day < 10 ? "0" : "") + day;
    hour = (hour < 10 ? "0" : "") + hour;
    min = (min < 10 ? "0" : "") + min;
    sec = (sec < 10 ? "0" : "") + sec;

    var str = date.getFullYear() + "-" + month + "-" + day + "_" +  hour + ":" + min + ":" + sec;

    /*alert(str);*/

    return str;
}

7

Saatler, dakikalar ve saniyeler, işletim sisteminizin saat dilimine bağlıdır. GMT'de (UST) saat 22:00:00 ancak farklı saat dilimlerinde herhangi bir şey olabilir. Bu nedenle, GMT tarihini oluşturmak için saat dilimi farkını saate ekleyin:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)

Neden zaman damgası çarpı 1000?
Bruno Gomes

2
@BrunoGomes, zaman damgasının saniyeler içinde olduğunu varsayarken, javascript bunları milisaniye içinde yapıyor.
Brent

7

buradaDate.prototype.toLocaleTimeString() belgelendiği gibi kullanın

lütfen url'deki en-US yerel ayar örneğini not edin.

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.