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

How can I add a minimum of days based on hour in 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')

但都一样

实例化时也必须将 300 分钟添加到 DP mindate。由于这个 "moment" 是当前时间和日期,因此添加它是相关的。

我和你不在同一个时区,所以我不得不加了 300 多分钟才能让它在明天...但是这是你的 updated Fiddle. I removed all .startOf(),我认为这与什么无关你努力实现。

编辑
我找到诀窍了。

问题是你改变了时刻值...所以当需要比较日期时,最好在 "Unix format" 中进行,这是从 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