Javascript MomentJs 错误输出

Javascript MomentJs wrong output

1.

好的,对于第一个问题,我有一个关于 Moment 的问题。它没有正确计算时间(我认为?) 这是我的脚本:

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 这将导致 workedHours 为 10.00。 这是来自 chrome 控制台:

您需要使用subtract方法

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


我认为更 momentjs 的方法是

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