最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

datetime - How can I convert time to decimal number in JavaScript? - Stack Overflow

programmeradmin1浏览0评论

I'm too lazy to fill out my time sheet at work by the end at the end of every month, so I've started adding some functions to our PDF form. Acrobat Pro offers to make advanced calculations using JavaScript, but I'm stuck with this problem.

I have two fields in which I enter the time when I start/end working. I want to calculate my overtime and output the result in a third field. however, I want the output to be decimal, so when I make half an hour overtime, the result would be 0.5

Example: my work time is 8.5 hours, I start a 7.30 and finish at 16.00 (4 pm).

My code so far:

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

I'm too lazy to fill out my time sheet at work by the end at the end of every month, so I've started adding some functions to our PDF form. Acrobat Pro offers to make advanced calculations using JavaScript, but I'm stuck with this problem.

I have two fields in which I enter the time when I start/end working. I want to calculate my overtime and output the result in a third field. however, I want the output to be decimal, so when I make half an hour overtime, the result would be 0.5

Example: my work time is 8.5 hours, I start a 7.30 and finish at 16.00 (4 pm).

My code so far:

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);
Share Improve this question edited Jan 25, 2022 at 8:44 idleberg asked Jun 5, 2012 at 7:57 idlebergidleberg 12.9k9 gold badges45 silver badges71 bronze badges 0
Add a comment  | 

3 Answers 3

Reset to default 25

Separate hours and minutes, divide minutes by 60, add to hours.

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

In my case I use it for calculating time on invoice.

The input could contain these 6 ways to write it for the user :

  • 1 -> 1 hour 0 minutes
  • 1,2 -> 1 hour 12 minutes
  • 1.5 -> 1 hour 30 minutes
  • 1:30 -> 1 hour 30 minutes
  • 1h40 -> 1 hour 40 minutes
  • 45m -> 0 hour 45 minutes

So I used this (thanks to Amadan), here is working code :

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

Example of use (with jQuery) :

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

Hope it could help some of us.

Another way ;)

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;
发布评论

评论列表(0)

  1. 暂无评论