2012-06-05 2 views
4

Я слишком ленив, чтобы заполнить свой лист времени на работу до конца в конце каждого месяца, поэтому я начал добавлять некоторые функции в нашу форму PDF. Acrobat Pro предлагает продвинутые вычисления с использованием JavaScript, но я застрял в этой проблеме.Как преобразовать время в десятичное число в Javascript?

У меня есть два поля, в которые я ввожу время, когда я начинаю/заканчиваю работу. Я хочу рассчитать свою сверхурочную работу и вывести результат в третьем поле. однако, я хочу, чтобы выход был десятичным, поэтому, когда я получаю сверхурочное время на полчаса, результат будет равен 0,5

Пример: мое рабочее время составляет 8.5 часов, я начинаю 7.30 и заканчиваю в 16.00 (16:00).

Мой код до сих пор:

var workTime = this.getField ("Work time").value; 
var startTime = this.getField ("Start time").value; 
var endTime = this.getField ("End time").value; 

event.value = workTime - (endTime - startTime); 

ответ

13

Отдельные часы и минуты, разделите минут 60, добавить до нескольких часов.

function timeStringToFloat(time) { 
    var hoursMinutes = time.split(/[.:]/); 
    var hours = parseInt(hoursMinutes[0], 10); 
    var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0; 
    return hours + minutes/60; 
} 
+6

'возвращение (часы + минуты/60) .toFixed (2)' и я пари, что мы в первую очередь необходимо сделать [как округлить время до ближайшей четверти часа в JavaScript ] (http://stackoverflow.com/questions/4968250/how-to-round-time-to-the-nearest-quarter-hour-in-javascript) – mplungjan

+0

Округление поплавка не было в вопросе, но если бы это было , вот как это делается. :п – Amadan

1

В моем случае я использую его для расчета времени на счета.

вход может содержать эти 6 способов, чтобы написать его для пользователя:

  • 1 -> 1 час 0 минут
  • 1,2 -> 1 час 12 минут
  • 1,5 -> 1 час 30 минут
  • 1:30 -> 1 час 30 минут
  • 1h40 -> 1 час 40 минут
  • 45m -> 0 час 45 минут

Так что я использовал это (спасибо Amadan), вот рабочий код:

function time2dec(tIn) { 
    if(tIn == '') 
     return 0; 
    if(tIn.indexOf('h') >= 0 || tIn.indexOf(':') >= 0) 
     return hm2dec(tIn.split(/[h:]/)); 
    if(tIn.indexOf('m') >= 0) 
     return hm2dec([0,tIn.replace('m','')]); 
    if(tIn.indexOf(',') >= 0) 
     return parseFloat(tIn.split(',').join('.')).toFixed(2); 
    if(tIn.indexOf('.') >= 0) 
     return parseFloat(tIn); 
    return parseInt(tIn, 10); 
} 

function hm2dec(hoursMinutes) { 
    var hours = parseInt(hoursMinutes[0], 10); 
    var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0; 
    return (hours + minutes/60).toFixed(2); 
} 

Пример использование (с JQuery):

var qty = time2dec($('#qty').val()); 
var price = parseFloat($('#price').val()); 
var total = (qty * price).toFixed(2); 

Надеется, что это может помочь некоторым из нас.

0

Другим способом;)

var aHours = 4.45; 

var aHoursInMinutes = (Math.floor(aHours) * 60)+ ((aHours - Math.floor(aHours)) * 100); 
// 285 minutes; 

var afromMinutesToHours = 
(Math.floor(aHoursInMinutes /60) + ((aHoursInMinutes - (60* Math.floor(aHoursInMinutes /60)))/100)); 
// 4.45 hours; 

var bHours = 0.33; 

var bHoursInMinutes = (Math.floor(bHours) * 60)+ ((bHours - Math.floor(bHours)) * 100); // 33 minutes; 

var bFromMinutesToHours = 
(Math.floor(bHoursInMinutes/60) + ((bHoursInMinutes - (60 * Math.floor(bHoursInMinutes/60)))/100)); // 0.33 hours; 

var resultInMinutes = aHoursInMinutes + bHoursInMinutes; 
var resultToHours = 
(Math.floor(resultInMinutes/60) + ((resultInMinutes - (60 * Math.floor(resultInMinutes/60)))/100)); // 5.18 hours; 
Смежные вопросы