简体   繁体   中英

Javascript MomentJs wrong output

1.

Ok, for the first question I have a question about Moment. It doesn't calculate the time right(I think?) This is my script:

function CalculateTime() {
    try {
        var originalStartTime = $('#startTime').val(),
            originalEndTime   = $('#endTime').val(),
            originalBreakTime = $('#breakTime').val();

        // breaking hours and minutes. needed format: HH:mm
        var startHours   = originalStartTime.substring(0, 2).replace(':', ''),
            startMinutes = originalStartTime.substring(3, 5),
            endHours     = originalEndTime.substring(0, 2).replace(':', ''),
            endMinutes   = originalEndTime.substring(3, 5);

        // momentJs variables
        var mStart = moment().hour(startHours).minute(startMinutes),
            mEnd = moment().hour(endHours).minute(endMinutes),
            mBreak = moment.duration(originalBreakTime);


        var result = moment( mEnd - mStart - mBreak).format('HH:mm');

        $('#workedHours').val(result + " timmar");

    } catch (err) {
        $('#workedHours').val(err);
    }  

startTime: 07:00, endTime: 16:00, breakTime 00.00 That will result with workedHours being 10.00. This is from the chrome console: 在此处输入图片说明

You need to use the subtract method

 function CalculateTime() { try { var originalStartTime = $('#startTime').val(), originalEndTime = $('#endTime').val(), originalBreakTime = $('#breakTime').val(); // breaking hours and minutes. needed format: HH:mm var startHours = originalStartTime.substring(0, 2).replace(':', ''), startMinutes = originalStartTime.substring(3, 5), endHours = originalEndTime.substring(0, 2).replace(':', ''), endMinutes = originalEndTime.substring(3, 5), breakHours = originalBreakTime.substring(0, 2).replace(':', ''), breakMinutes = originalBreakTime.substring(3, 5); // momentJs variables var mStart = moment().hour(startHours).minute(startMinutes), mEnd = moment().hour(endHours).minute(endMinutes), mBreak = moment.duration(breakHours * 60 + +breakMinutes, 'minutes'); var result = mEnd.subtract(mStart).subtract(mBreak).format('HH:mm'); $('#workedHours').val(result + " timmar"); } catch (err) { $('#workedHours').val(err); } } CalculateTime(); 
 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <input id="startTime" value="07:00" /> <input id="endTime" value="16:00" /> <input id="breakTime" value="00.30" /> <input id="workedHours" /> 


I think a more momentjs way is

 function CalculateTime() { try { var originalStartTime = $('#startTime').val(), originalEndTime = $('#endTime').val(), originalBreakTime = $('#breakTime').val(); // momentJs variables var mStart = moment(originalStartTime, 'HH:mm'), mEnd = moment(originalEndTime, 'HH:mm'), mBreak = moment.duration(originalBreakTime); var result = mEnd.subtract(mStart).subtract(mBreak).format('HH:mm'); $('#workedHours').val(result + " timmar"); } catch (err) { $('#workedHours').val(err); } } CalculateTime(); 
 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <input id="startTime" value="07:00" /> <input id="endTime" value="16:00" /> <input id="breakTime" value="00:30" /> <input id="workedHours" /> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM