Zeitstempel in menschenlesbares Format

Lesezeit: 5 Minuten

Nun, ich habe ein seltsames Problem beim Konvertieren von Unix-Zeitstempeln in menschliche Darstellungen 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 erwartete Ergebnisse für 2011 2, 25 22 00 00. Aber es ist 2011, 2, 6, 0, 0, 0. Was ich vermisse?

  • Hilft das: stackoverflow.com/questions/847185/…

    – James Hülse

    24. März 2011 um 9:16 Uhr

  • Es ist dasselbe, was ich tue

    – Georgewitsch

    24. März 2011 um 9:20 Uhr

  • Ich habe dies in der Firefox Firebug-Konsole ausprobiert und das erwartete Ergebnis erhalten. Welchen Browser/OS verwendest du?

    – andrewmu

    24. März 2011 um 9:21 Uhr

  • Ich habe ein jsfiddle erstellt und es scheint gut zu funktionieren: jsfiddle.net/9SUqX (Ich habe auf Opera getestet)

    – James Hülse

    24. März 2011 um 9:28 Uhr

  • Hier ist, was ich bekomme img841.imageshack.us/i/screenshot20110324at113.png

    – Georgewitsch

    24. März 2011 um 9:35 Uhr

Benutzer-Avatar
KooiInc

getDay() gibt den Wochentag zurück. Um das Datum zu erhalten, verwenden Sie date.getDate(). getMonth() ruft den Monat ab, aber der Monat basiert auf null, also wird verwendet getMonth() + 1 sollte Ihnen den richtigen Monat geben. Der Zeitwert scheint hier in Ordnung zu sein, obwohl die Stunde hier 23 ist (GMT+1). Wenn Sie universelle Werte wollen, fügen Sie hinzu UTC zu den Methoden (z date.getUTCFullYear(), date.getUTCHours())

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

Hier ist eine kleine Hilfsidee, um Werte eines gegebenen Wertes abzurufen Date:

const dateHelper = dateHelperFactory();
const formatMe = date => {
  const vals = `yyyy,mm,dd,hh,mmi,ss,mms`.split(`,`);
  const myDate = dateHelper(date).toArr(...vals);
  return `${myDate.slice(0, 3).join(`/`)} ${
    myDate.slice(3, 6).join(`:`)}.${
    myDate.slice(-1)[0]}`;
};

// to a formatted date with zero padded values
console.log(formatMe(new Date(1301090400 * 1000)));

// the raw values
console.log(dateHelper(new Date(1301090400 * 1000)).values);

function dateHelperFactory() {
  const padZero = (val, len = 2) => `${val}`.padStart(len, `0`);
  const setValues = date => {
    let vals = {
       yyyy: date.getFullYear(),
       m: date.getMonth()+1,
       d: date.getDate(),
       h: date.getHours(),
       mi: date.getMinutes(),
       s: date.getSeconds(),
       ms: date.getMilliseconds(), };
    Object.keys(vals).filter(k => k !== `yyyy`).forEach(k => 
      vals[k[0]+k] = padZero(vals[k], k === `ms` && 3 || 2) );
    return vals;
  };
  
  return date => ( {
    values: setValues(date),
    toArr(...items) { return items.map(i => this.values[i]); },
  } );
}
.as-console-wrapper {
    max-height: 100% !important;
}

Oder sehen Sie das klein Stackblitz-Projekt (etwas effizienter).

  • Ihr Vorschlag hilft beim Datum, aber ich kann immer noch nicht herausfinden, was mit Stunden, Minuten und Sekunden falsch ist

    – Georgewitsch

    24. März 2011 um 9:21 Uhr

  • @george du verpasst nichts. Diese Werte sind Ganzzahlen, können also keinen Wert wie “00” haben. Sie können es zum Beispiel ganz einfach selbst anhängen minute = (minute < 10 ? "0" : "") + minute;

    – Beschatten Sie den Kinderzauberer

    24. März 2011 um 9:28 Uhr

  • @georgevich: in welcher zeitzone bist du? Was passiert, wenn Sie verwenden date.getUTCHours()?

    – KooiInc

    24. März 2011 um 9:39 Uhr

  • GMT + 2 Das Ergebnis von date.getUTCHours() ist 19

    – Georgewitsch

    24. März 2011 um 9:43 Uhr

  • @lenny Ich würde nicht sagen, dass ich es bevorzuge. Vielleicht ein Überbleibsel von altem Code. Habe es entfernt.

    – KooiInc

    11. August um 8:18 Uhr

Benutzer-Avatar
Schuvik

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

Wo unixtime ist die Zeit, die von Ihrer SQL-Datenbank zurückgegeben wird. Hier ist ein Geige wenn es hilft.

Verwenden Sie es beispielsweise für die aktuelle Zeit:

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

  • Ich habe diese Antwort und die akzeptierte Antwort hier gefunden [ *.toString() ] nützlich sein: stackoverflow.com/questions/13622142/… Hier ist eine Zusammenfassung: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece

    – Viktoria Stuart

    8. März 2017 um 23:29 Uhr

  • "unixtime is undefined" ist, was ich hier bekomme

    – Kati

    18. Juli 2017 um 17:31 Uhr


  • Jedenfalls lässt es sich leicht im Einzeiler drehen new Date(1480966325 * 1000).toUTCString()

    – Rožkalns

    26. Juli 2017 um 13:41 Uhr

Hier ist die Antwort von kooilnc mit aufgefüllten 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;
}

Benutzer-Avatar
Kampf4Leben

verwenden Date.prototype.toLocaleTimeString() wie dokumentiert hier

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

Benutzer-Avatar
Hossein

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 Zeitzonen-Offset zur Zeit hinzu, um das GMT-Datum zu erstellen:

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

  • Warum Zeitstempel mal 1000?

    – Bruno Gomes

    20. März 2015 um 15:06 Uhr

  • @BrunoGomes er geht davon aus, dass der Zeitstempel in Sekunden ist, während Javascript sie in Millisekunden ausführt.

    – Brent

    24. September 2015 um 17:41 Uhr

Benutzer-Avatar
David Alger

Ich suchte nach einer sehr spezifischen Lösung, um die aktuelle Zeit als Zeichenfolge mit garantierter Länge zurückzugeben, die am Anfang jeder Protokollzeile vorangestellt werden soll. Hier sind sie, wenn jemand anderes das Gleiche sucht.

Grundlegender Zeitstempel

"2021-05-26 06:46:33"

Die folgende Funktion gibt einen mit Nullen aufgefüllten Zeitstempel für die aktuelle Zeit zurück (immer 19 Zeichen lang)

function getTimestamp () {
  const pad = (n,s=2) => (`${new Array(s).fill(0)}${n}`).slice(-s);
  const d = new Date();
  
  return `${pad(d.getFullYear(),4)}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}

Vollständiger Zeitstempel

"2021-06-02 07:08:19.041"

Die folgende Funktion gibt einen mit Nullen aufgefüllten Zeitstempel für die aktuelle Zeit einschließlich Millisekunden zurück (immer 23 Zeichen lang)

function getFullTimestamp () {
  const pad = (n,s=2) => (`${new Array(s).fill(0)}${n}`).slice(-s);
  const d = new Date();
  
  return `${pad(d.getFullYear(),4)}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(),3)}`;
}

  • Warum Zeitstempel mal 1000?

    – Bruno Gomes

    20. März 2015 um 15:06 Uhr

  • @BrunoGomes er geht davon aus, dass der Zeitstempel in Sekunden ist, während Javascript sie in Millisekunden ausführt.

    – Brent

    24. September 2015 um 17:41 Uhr

Benutzer-Avatar
harrrrr

So erhalten Sie direkt eine lesbare lokale Zeitzone:

var timestamp = 1301090400,
date = new Date(timestamp * 1000)
document.write( date.toLocaleString() );

1215570cookie-checkZeitstempel in menschenlesbares Format

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy