Javascript: Как превратить время (в виде дроби) в читаемую строку? - PullRequest
2 голосов
/ 26 июля 2010

У меня есть время, сохраненное в виде дроби (сделано так, чтобы его можно было отобразить на графике), например, 15,5 - это 3:30 вечера, а 23,25 - 11,15 вечера.Мне нужно превратить эти числа в строки в формате ЧЧ: ММ: СС.Есть ли простой способ сделать это?

Ответы [ 3 ]

8 голосов
/ 26 июля 2010
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

Затем используйте скрипт форматирования даты, например this или Date.js , если вы не любите, не форматируете и не дополняете.1008 * См. Пример .Я использую функцию форматирования с здесь .

3 голосов
/ 26 июля 2010

Как то так?

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

или полностью ручная

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 );

Обновление

И версия с секундами.

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 );
0 голосов
/ 26 июля 2010

Ручная функция:

        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);
        };

Тесты:

        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!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...