如何在datetimepicker中添加基于小时的最少天数?

时间:2017-08-16 15:09:53

标签: javascript jquery momentjs datetimepicker bootstrap-datetimepicker

我的代码是这样的javascript:

$(function () {    
  $('#datepicker').datetimepicker({
    minDate: moment().startOf('day')
  }).on('dp.change', function(e){
    if( e.date && e.date.isSame(moment(), 'd') ){
      var min = moment().startOf('minute').add(300, 'm');
      $('#timepicker').data("DateTimePicker").minDate(min);
    } else {
      $('#timepicker').data("DateTimePicker").minDate(false);
    }
  });

  $('#timepicker').datetimepicker({
    minDate: moment().startOf('minute').add(300, 'm'),
  });
});

演示和完整代码如下:https://jsfiddle.net/tyvetr5h/

我的问题:

例如现在8月16日晚上9点。由于看来显示的日期是8月17日凌晨2点。但我的代码是8月16日凌晨2点

我该如何解决?

我尝试像这样更新一天:

minDate: moment().startOf('day').add(300, 'm')

但它是一样的

1 个答案:

答案 0 :(得分:1)

在实例化时,您必须将300分钟添加到DP mindate。从这个"时刻"是当前时间和日期,与添加它有关。

我和你的时区不一样,所以我必须加上超过300分钟才能让它明天落下......但这是你的updated Fiddle。我删除了所有.startOf(),我认为这与您尝试实现的目标无关。

修改
我找到了诀窍。

事情就是你改变了时刻价值...所以当是时候比较日期时,最好用" Unix格式",这是从1970年1月1日起的毫秒......

这个长整数并不关心日变化。因此,如果时间是从现在开始的300分钟,则比较容易(和防错)。

$(function () {

  console.clear();

  $('#datepicker').datetimepicker({
    minDate: moment().add(300, 'm').startOf("day")
  })
    .val(moment().add(300, 'm').format("DD-MM-YYYY"))   // To set correct "valid" date from start

    .on('dp.change', function(e){
    var now = moment().format("X");
    //console.log(e.date.format("X"));
    //console.log(now);

    // Comparing selected date (moment object) in milliseconds
    if(e.date.format("X")+(300*60*1000) > now ){
      console.log("above 5 hours, unlocking time.");
      $('#timepicker').data("DateTimePicker").minDate(false);
    }else{
      console.log("below 5 hours, locking time (and probably resetting the value to min...)");
      $('#timepicker').data("DateTimePicker").minDate(moment().add(300, 'm'));
    }

  });

  $('#timepicker').datetimepicker({
    minDate: moment().add(300, 'm'),
  });
});

CodePen