J'ai le temps stocké comme une fraction (fait de sorte qu'il peut être affiché sur un graphique), par exemple. 15h15 est 15h30 et 23h25 est 23h15. J'ai besoin de transformer ces nombres en chaînes au format HH: MM: SS. Y a-t-il un moyen simple de le faire?Javascript: Comment transformer l'heure (stockée en fraction) en une chaîne lisible?
Répondre
Quelque chose comme ça?
var fraction = 14.5;
var hours = Math.floor(fraction); // extract the hours (in 24 hour format)
var mins = 60 * (fraction - hours); // calculate the minutes
t = new Date(); // create a date/time object
t.setHours(hours); // set the hours
t.setMinutes(mins); // set the mins
alert(t.toTimeString()); //show it
ou complètement manuel
var fraction = 14.5;
var hours = Math.floor(fraction);
var mins = 60 * (fraction - hours);
var ampm = ((fraction%24)<12)?'am':'pm';
formatted = ('0' + hours%12).substr(-2) + ':' + ('0' + mins).substr(-2) + ':00 ' + ampm;
alert(formatted);
Mise à jour
Et une version avec secondes et ..
var fraction = 14.33;
var hours = Math.floor(fraction);
var allseconds = 3600 * (fraction - hours);
var minutes = Math.floor(allseconds/60);
var seconds = Math.floor(allseconds%60);
var ampm = ((fraction%24)<12)?'am':'pm';
formatted = ('0' + hours%12).substr(-2) + ':' + ('0' + minutes).substr(-2) + ':' + ('0' + seconds).substr(-2) +' ' + ampm;
alert(formatted);
var fraction = 23.5;
var date = new Date(2000, 1, 1); // use any date as base reference
date.setUTCSeconds(fraction * 3600); // add number of seconds in fractional hours
Ensuite, utilisez un script de mise en forme de date tel que this, ou Date.js si vous n'êtes pas friand ou le formatage et le remplissage.
date.format("HH:MM:ss"); // 23:30:00
See an example. J'utilise la fonction de formatage de here.
+1, brillant .. je l'ai fait tous manuellement .. lol .. * facepalm *! –
+1 oui, le formateur de date de Steven Leviathin est génial pour le formatage de date flexible dans JS: http://blog.stevenlevithan.com/archives/date-time-format – fearoffours
@Gaby - J'ai récemment découvert que JavaScript set * fonctions gérer le débordement très joliment et me mettre dans la crainte :) .. @fearoffours - Il est en effet une bibliothèque légère impressionnante pour les dates de mise en forme lorsque Date.js se sent un peu trop :) – Anurag
Fonction manuelle:
var time = function(num) {
if(num < 0 || num >= 24) {throw "Invalid number");}
var x = num > 13 ? num - 12 : num;
var h = Math.floor(x);
var min = x - h;
var ampm = num >= 12 && num < 24 ? "pm" : "am";
return (h + ":" + Math.floor(min * 60) + ampm);
};
Tests:
time(13.40); // 1:24pm
time(11.25); // 11:15pm
time(12.50); // 12:30pm
time(23.50); // 11:30pm
time(0.50); // 0:30am
time(24.00); // error!!
La fraction stocke également secondes ainsi que minutes, mais qui ressemble à ce que je dois à ce jour – Sarah
@Sarah, a ajouté complètement une autre façon manuel .. –
@Sarah, version ajoutée avec secondes :) –