2

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: enter image description here

3
  • .Hours is not a function. TypeError: moment.hours is not a function Commented Sep 10, 2015 at 9:58
  • Sorry : moment().hours( mEnd - mStart - mBreak).hours() * my mistake! Commented Sep 10, 2015 at 9:59
  • Than it just shows 00:00 Commented Sep 10, 2015 at 10:01

1 Answer 1

3

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" />

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.