Ich speichere Zeit in einer MySQL-Datenbank als Unix-Zeitstempel und das wird an einige JavaScript-Code gesendet. Wie würde ich nur die Zeit aus es bekommen?
Zum Beispiel, in HH/MM/SS
Format.
Ich speichere Zeit in einer MySQL-Datenbank als Unix-Zeitstempel und das wird an einige JavaScript-Code gesendet. Wie würde ich nur die Zeit aus es bekommen?
Zum Beispiel, in HH/MM/SS
Format.
let unix_timestamp = 1549312452
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp * 1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();
// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.log(formattedTime);
Weitere Informationen über das Date-Objekt finden Sie unter MDN oder die ECMAScript 5-Spezifikation .
Sie könnten sich auch ein paar Prozessor-Ticks sparen, indem Sie die große Multiplikation vermeiden, indem Sie einfach drei 0en anhängen: echo "var date = new Date(" . $timestamp . "000); \n ";
@nickf-Multiplikationen sind auf modernen CPUs trivial - die String-Verkettung erfordert eine Los mehr Arbeit!
Verkettung sollte aus dem Lesen von Speicher und dem Schreiben von Speicher bestehen...wie kann jemand etwas entwerfen, das etwas Einfaches wie das Anhängen nimmt und es komplizierter macht als Multiplikation...fragen Sie ein Kind, ob es verketten kann, und es kann es...Multiplikation ist schwieriger...außerdem ist der Speicher so ausgelegt, dass er sowieso linear funktioniert...Kann jemand einen Verweis auf den Kommentar von @nickf geben?
function timeConverter(UNIX_timestamp){
var a = new Date(UNIX_timestamp * 1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
var sec = a.getSeconds();
var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
return time;
}
console.log(timeConverter(0));
Für HH/MM/SS verwenden Sie einfach die letzten drei Variablen und die Zeit wird in Ihrer lokalen Zeit sein, aber wenn Sie die UTC-Zeit erhalten möchten, verwenden Sie einfach die getUTC-Methoden. Hier ist der Code.
Ich habe diese Lösung verwendet, sie aber so abgeändert, dass Minuten und Sekunden als :03 oder :09 statt als :3 oder :9 angezeigt werden: var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
Fehler: getMonth()
gibt eine Monatszahl zwischen 0 und 11 zurück, also a.getMonth() - 1
ist falsch.
In der neuen Welt sollten wir uns auf den Standard zubewegen Intl
JavaScript-Objekt, das über eine praktische DateTimeFormat
Konstrukteur mit .format()
Methode:
function format_time(s) {
const dtFormat = new Intl.DateTimeFormat('en-GB', {
timeStyle: 'medium',
timeZone: 'UTC'
});
return dtFormat.format(new Date(s * 1e3));
}
console.log( format_time(12345) ); // "03:25:45"
Um jedoch 100% kompatibel mit allen älteren JavaScript-Engines zu sein, ist hier die kürzeste Ein-Zeilen-Lösung, um Sekunden zu formatieren als hh:mm:ss
:
function format_time(s) {
return new Date(s * 1e3).toISOString().slice(-13, -5);
}
console.log( format_time(12345) ); // "03:25:45"
Método
Date.prototype.toISOString()
gibt die Zeit in vereinfacht verlängert ISO 8601 Format, das immer 24 oder 27 Zeichen lang (d. h.YYYY-MM-DDTHH:mm:ss.sssZ
oder±YYYYYY-MM-DDTHH:mm:ss.sssZ
bzw.). Die Zeitzone ist immer Null UTC-Versatz.
Diese Lösung erfordert keine Bibliotheken von Drittanbietern und wird von allen Browsern und JavaScript-Engines unterstützt.
Ich füge deine Funktion in die Konsole von Chrome ein :/ Sogar in deinem Fiddle zeigt es 01:02:00 für mich an! Habe es mit Firefox versucht, gleiche Ergebnisse. Sehr seltsam... Ich bin ziemlich sicher, es ist, weil ich GMT+1 bin!
Ich habe eine Bearbeitung für Ihre Antwort angeboten, die jede Zeitzone ignoriert, so dass immer der richtig formatierte Wert angezeigt wird!
@SteveChamaillard Vielen Dank, Steve. Du hattest Recht, toTimeString
funktionierte nicht gut mit Zeitzonen. Leider wurde Ihre Bearbeitung abgelehnt, bevor ich sie sehen konnte. Ich würde jedoch vorschlagen, Folgendes zu verwenden toISOString
stattdessen, da toGMTString
ist veraltet und kann auf verschiedenen Plattformen unterschiedliche Ergebnisse liefern.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
25 Stimmen
Multiplizieren Sie einfach mit 1000, da JS-Zeitstempel in Millisekunden und PHP in Sekunden angegeben sind.
1 Stimmen
Hier ist ein sehr nützlicher Link mit verschiedenen Datumsformaten: timestamp.online/article/ Kombinieren Sie das mit der Multiplikation mit 1000 und Sie haben den Job erledigt!
0 Stimmen
Sehen Sie hier, was ich erreicht habe: stackoverflow.com/a/64089456/2927228
0 Stimmen
Wenn Sie eine Zeichenfolge in einem anderen Datumsformat haben, siehe Parsing einer Zeichenkette zu einem Datum in JavaScript .
0 Stimmen
dt=new Date(1234567890 * 1000).toLocaleString();
ergibt Datum+Zeit - oder verwenden Sie.toLocaleDateString()
o.toLocaleTimeString()
)