Telerik Kendo TimePicker 最小/最大设置被忽略

Telerik Kendo TimePicker Min / Max setting get ignored

我有两个 Kendo TimePicker:fromto

我试图实现的是使用JavaScript来改变这些TimePickers的下拉列表选项的范围。两个TimePickers的间隔都是30分钟,从00:00到23:30.

比如选择from到14:30,那么打开to时的选项至少是14:30。同样,如果选择to到20:00,那么from的最大选项就是20:00

我已经编写了我的代码并且一切正常 除了 fromto 都选择了最后一个选项 (23:30) 时,预期的行为是 to 的选项只是 23:30 本身。然而,实际上to的选项是所有时间跨度,即30分钟间隔,从23:30开始,到23:00(即23:30,00:00 , 00:30, ... 23:00)

我已经尝试了许多其他 "combinbations",包括都设置为 00:00,都显示正确的行为,除了这种情况。不知是不是Telerik控件的已知bug,还是我的代码有什么问题?我怎样才能实现预期的行为?

var $start = $startSel.data("kendoDateTimePicker");
var $end = $endSel.data("kendoDateTimePicker");

var start = $startSel.val() == "" ? null : $start.value();
var end = $endSel.val() == "" ? null : $end.value();

if (start != null) {
  $end.min(comLib.ceilTo30Minute(start));
} else {
  $end.min(new Date(1900, 0, 1));
  $end.max(new Date(2099, 11, 31));
}
if (end != null) {
  $start.max(comLib.floorTo30Minute(end));
} else {
  $start.min(new Date(1900, 0, 1));
  $start.max(new Date(2099, 11, 31));
}


///////////////////// in comLib

function ceilTo30Minute (dateTime) {
   if (dateTime == null)
     return null;
   var min = dateTime.getMinutes() % 30;
   if (min != 0)
   {
     dateTime = publicAccess.addTime(dateTime, 0, -min);
     dateTime = publicAccess.addTime(dateTime, 0, 30);
   }
   return dateTime;
};
function floorTo30Minute(dateTime) {
  if (dateTime == null)
    return null;
  var min = dateTime.getMinutes() % 30;
  if (min != 0) {
    dateTime = publicAccess.addTime(dateTime, 0, -min);
  }
  return dateTime;
};

我已经打开了一个支持票,Telerik 已经回复了我,结果这似乎是一个 Kendo UI 错误。我在这里引用他们的回复:

This seems to be a bug in the DateTimePicker and I will forward it to our developers team for further investigation. For the time being you could handle the open event of the second DateTimePicker and manually hide the unwanted times:

datetimepicker.bind("open", function(e) {
    if (e.view === "time" && e.sender.min().toString().indexOf("23:30:00") >= 0) {      
        var times = e.sender.timeView.popup.element.find("li");
        for(var i=1; i < times.length; i++){
            $(times[i]).hide();
        }
    }
});