0

私はdaterangepickerがその日付範囲を無効にする機能を持っていることを知っています。しかし今回は時間範囲を無効にする必要があります。特に午前12時〜午後1時。私が午前11時から午後2時までを選択した場合、計算された合計時間は、無効時間の範囲から1時間をストリッピングする2時間になります。これはこのピッカーが可能ですか?そうでない場合、回避策はありますか? //http//jsfiddle.net/onelazy/amtxsf0x/リンクが動作していない:スターターとして、私は、http thisブートストラップDaterangepicker時間減算

$(function() { 
    $('input[name="Date2"]').daterangepicker({ 
     minDate: getCurrentDateToday()+" 8:30 AM", 
     dateLimit: { "days": 1}, 
     timePicker: true, 
     timePickerIncrement: 1, 
     locale: {format: 'MM/DD/YYYY h:mm A'} 
    }, 
    function(start, end, label) 
    { 
     var hd = end.diff(start, 'hours'); 
     var md = end.diff(start, 'minutes'); 
     var minutesDue = md - (hd*60); 
     var hoursDue = hd +"."+minutesDue; 
     $('#txtTotalHrs').val(hoursDue); 
    }); 
}); 
+0

を持っています。 –

+0

申し訳ありませんが、私はリンクを編集して作業中のものに変更しました – OneLazy

+0

Hey OneLazy、あなたの問題は解決されました...編集済みの回答をチェックしてください(あなたのコードにすべてのスクリプトを入れて試してみてください)。 –

答えて

2

EDITED

$(function() { 
    $('input[name="Date2"]').daterangepicker({ 
     minDate: getCurrentDateToday() + " 8:30 AM", 
     dateLimit: { 
     "days": 1 
     }, 
     timePicker: true, 
     timePickerIncrement: 1, 
     locale: { 
     format: 'MM/DD/YYYY h:mm A' 
     } 
    }, 
    function(start, end, label) { 

     var breakStart = "12:00 PM" , breakEnd = "12:30 PM"; 

     var start_end_diff = (new Date(end) - new Date(start))/1000/60; 

     var break_diff = exclude_BreakTiming(start,end ,breakStart, breakEnd); 

     var total_minutes = (start_end_diff - break_diff); 

     $('#txtTotalHrs').val(getTimeFromMins(total_minutes)); 

    }); 
}); 

function getTimeFromMins(mins) { 
    // do not include the first validation check if you want, for example, 
    // getTimeFromMins(1530) to equal getTimeFromMins(90) (i.e. mins rollover) 
    if (mins >= 24 * 60 || mins < 0) { 
     throw new RangeError("Valid input should be greater than or equal to 0 and less than 1440."); 
    } 
    var h = mins/60 | 0, 
     m = mins % 60 | 0; 
    return moment.utc().hours(h).minutes(m).format("hh:mm"); 
} 

function getCurrentDateToday() { 
    var currentDate = new Date(); 
    var day = currentDate.getDate() 
    var month = currentDate.getMonth() + 1; 
    var year = currentDate.getFullYear(); 
    var fullDate = month + "/" + day + "/" + year; 
    return fullDate; 
} 

function exclude_BreakTiming (StartTime , EndTime, BreakStart, BreakEnd){ 
    StartTime = Date.parse('01/01/2011 ' +StartTime.format('h:mm A')); 
    EndTime = Date.parse('01/01/2011 ' +EndTime.format('h:mm A')); 

    var breakStart = Date.parse('01/01/2011 '+BreakStart); 
    var breakEnd = Date.parse('01/01/2011 '+BreakEnd); 

    if((StartTime <= breakEnd) || ((StartTime < breakStart) && (EndTime > breakEnd))) 
    { 
    return ((breakEnd - breakStart) /1000 /60); 
    }else{ 
    return 0; 
    } 
} 
+0

InBreakTimeは常に偽です。なぜそうですか?または私は何かを見落としていますか?ここでは更新されたバイディーです:http://jsfiddle.net/amtxsf0x/2/ – OneLazy

+0

あなたのアップデートごとに 'var breakEnd = moment(" 12:59 PM "、" h:mm A ");それをそのまま維持してみてください。 InBreakTimeは、時間範囲 '11:00〜2:00'を選択すると真となります。休憩時間を差し引いた後、総時間は' 2.6 'になります。 –

+0

卿選択を試みました02/10/2017 8:30 AM - 02/10/2017 3:30 PMしかし、それは戻って7.0ストリップしない1時間 – OneLazy

関連する問題