How can I convert time to decimal number in JavaScript?

后端 未结 4 2259
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-15 17:43

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

4条回答
  •  灰色年华
    2021-02-15 18:16

    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.

提交回复
热议问题