Zeitstempel in ein für Menschen lesbares Format

89

Nun, ich habe ein seltsames Problem beim Konvertieren von einem Unix-Zeitstempel in eine menschliche Darstellung mit Javascript

Hier ist der Zeitstempel

1301090400

Das ist mein 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();  

Ich habe erwartet, dass die Ergebnisse 2011 2, 25 22 00 00 sein werden. Aber es ist 2011, 2, 6, 0, 0, 0 Was vermisse ich?

Georgevich
quelle
3
Hilft dies: stackoverflow.com/questions/847185/…
James Hulse
Es ist das gleiche, was ich tue
Georgevich
Ich habe dies in der Firefox Firebug-Konsole versucht und das erwartete Ergebnis erzielt. Welchen Browser / welches Betriebssystem verwenden Sie?
Andrewmu
Ich habe eine jsfiddle erstellt und es scheint gut zu funktionieren: jsfiddle.net/9SUqX (ich habe auf Opera getestet)
James Hulse
Hier ist, was ich bekomme img841.imageshack.us/i/screenshot20110324at113.png
Georgevich

Antworten:

100

getDay()Gibt den Wochentag zurück. Verwenden Sie, um das Datum abzurufen date.getDate(). getMonth()Ruft den Monat ab, aber der Monat basiert auf Null. getMonth()+1Wenn Sie ihn verwenden, sollten Sie den richtigen Monat erhalten. Der Zeitwert scheint hier in Ordnung zu sein, obwohl die Stunde hier 23 ist (GMT + 1). Wenn Sie universelle Werte wollen, fügen Sie UTCzu den Methoden (zB 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]
KooiInc
quelle
1
Ihr Vorschlag hilft beim Datum, aber ich kann immer noch nicht herausfinden, was mit Stunden, Minuten und Sekunden nicht
stimmt
7
@george du vermisst nichts. Diese Werte sind Ganzzahlen und können daher keinen Wert wie "00" haben. Sie können es zum Beispiel einfach selbst anhängenminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard ist Ear For You
@georgevich: In welcher Zeitzone bist du? Was passiert, wenn Sie verwenden date.getUTCHours()?
KooiInc
1
GMT + 2 Das Ergebnis von date.getUTCHours () ist 19
Georgevich
GMT + 2, also 22h Weltzeit = 0h Ihre Zeit. Hier ist eine jsfiddle mit UTC-Werten: jsfiddle.net/EZFG9 .
KooiInc
47
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

Wo unixtimeist die von Ihrer SQL-Datenbank zurückgegebene Zeit? Hier ist eine Geige, wenn es hilft.

Verwenden Sie es beispielsweise für die aktuelle Zeit:

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

Shouvik
quelle
Ich fand diese Antwort und die akzeptierte Antwort hier [* .toString ()] nützlich: stackoverflow.com/questions/13622142/… Hier ist ein Kern: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart
1
"unixtime is undefined"ist, was ich hier
Katie
1
Wie auch immer, es kann leicht in Oneliner gedreht werdennew Date(1480966325 * 1000).toUTCString()
Rozkalns
9

Hier ist die Antwort von kooilnc mit gepolsterten Nullen

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;
}
Golaker
quelle
7

Stunden, Minuten und Sekunden hängen von der Zeitzone Ihres Betriebssystems ab. In GMT (UST) ist es 22:00:00, aber in verschiedenen Zeitzonen kann es alles sein. Fügen Sie also den Zeitzonenversatz zur Zeit hinzu, um das GMT-Datum zu erstellen:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Hossein
quelle
Warum Zeitstempel mal 1000?
Bruno Gomes
2
@BrunoGomes Er geht davon aus, dass der Zeitstempel in Sekunden angegeben ist, während Javascript dies in Millisekunden tut.
Brent
7

Verwendung Date.prototype.toLocaleTimeString()wie hier dokumentiert

Bitte beachten Sie das Gebietsschema-Beispiel en-US in der URL.

Kampf4Leben
quelle