【问题标题】:Bootstrap Daterangepicker time subtractionBootstrap Daterangepicker 时间减法
【发布时间】:2017-06-28 08:35:14
【问题描述】:

我知道 daterangepicker 具有禁用日期范围的功能。但是这次我需要禁用时间范围。特别是 12:00 AM - 1:00 PM。如果我选择上午 11:00 - 下午 2:00,计算的总小时数将为 2 小时,从禁用时间范围中去除 1 小时。这可能是这个选择器吗?如果没有,是否有解决方法?首先,我有this

$(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);
    });
});

【问题讨论】:

  • 对不起,我编辑了链接,把它改成了有效的
  • Hey OneLazy,您的问题已解决...检查已编辑的答案(将所有脚本放入您的代码并尝试)。
  • 谢谢Soni..感谢您的努力。你是一个救生员!
  • 感谢oneLazy,你的问题迫使我努力......:P

标签: javascript jquery daterangepicker bootstrap-daterangepicker


【解决方案1】:

已编辑

$(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;
  }
}

【讨论】:

  • InBreakTime 总是错误的,为什么会这样?还是我忽略了什么?这是一个更新的小提琴:jsfiddle.net/amtxsf0x/2
  • 根据您的更新,无需将var breakEnd = moment("12:59 PM", "h:mm A");' keep it as it is... and try. InBreakTime will be true if you select Time range 11:00 到 2:00` 扣除您的休息时间后,它会给出总小时数 2.6...
  • 先生,我尝试选择 02/10/2017 8:30 AM - 02/10/2017 3:30 PM,但它一直返回 7.0,它没有剥离 1 小时
  • 谢谢!我很感激!
  • if(StartTime is less than BreakStartTime &amp;&amp; EndTime Time grater than BreakEndTime){ InBreakTime = true; }
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 2017-11-18
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2021-03-21
  • 2017-03-01
相关资源
最近更新 更多