Javascript 禁用过去时间

Javascript 禁用过去时间,javascript,jquery,html,dojo,Javascript,Jquery,Html,Dojo,一旦用户选择日期,我想从下拉列表中禁用过去的时间。 下面是示例代码: function (declare, DateTextBox, locale, dom, lang, registry, ready) { var pad, update_current_available_times, get_hour_string; pad = function (n) { n = n + ''; return n.length >= 2 ? n :

一旦用户选择日期,我想从下拉列表中禁用过去的时间。 下面是示例代码:

function (declare, DateTextBox, locale, dom, lang, registry, ready) {
    var pad, update_current_available_times, get_hour_string;
    pad = function (n) {
        n = n + '';
        return n.length >= 2 ? n : new Array(2 - n.length + 1).join('0') + n;
    },
    get_hour_string = function (t) {
        var hour = pad(t.getHours()-1);
        var minute = pad(t.getMinutes());
        return 'T' + hour + ':' + minute + ':00';
    },
对于分钟,我按如下所示进行了更改,但给出了错误的结果。但是,当尝试从分钟禁用过去的时间时,会给出意外的结果

get_hour_string = function (t) {
    var hour = pad(t.getHours()-1); //added -1 to disable past time when used dojo1.9
    var d1 = new Date (),
   d2 = new Date ( d1 );
   d2.setMinutes ( d1.getMinutes() + 20 );
   var minute1 = pad(d2.getMinutes());
    alert("d2.getMinutes() : " + d2.getMinutes() );
  return 'T' + hour + ':' + minute1 + ':00';
  }

请建议javascript文件中需要做哪些更改来修复从分钟下拉列表中禁用过去时间的问题。

在我看来,您的javascript文件几乎可以正常工作了

如果我看对了,在小时选择器的onChange函数中,您只需要更改:

useMin = 'T02:' + pad(now.getMinutes()) + ':00';

这行吗

编辑:啊,我看到你使用了一个小技巧,在分钟下拉列表中只显示分钟。您可能只需要使用dijit/form/Select,但这是一个很好的技巧

由于您已将visibleIncrement和clickableIncrement设置为02:05:00和02:00:00,因此下拉菜单实际显示的是:

00:00:00
02:05:00
04:10:00

22:55:00

因此,在设置分钟下拉列表的最小限制时,实际上还必须设置“不可见”小时

例如,如果“now”是14:34:00,您必须花34分钟,检查它属于哪个2小时“组”:
34%5=6ish

然后从中获取小时数:
2*6=12

。。因此,在这种情况下,分钟下拉列表的
useMin
将是T12:34:00

useMin = 'T' + 
    pad(2 * Math.floor(now.getMinutes() / 5)) + ':' +
    pad(now.getMinutes()) + ':00';

至少我认为这样可以:)可能有一个更简单的解决方案。

是的,正如你提到的,Frode正在工作,唯一不工作的是00分钟,它总是被禁用。请看。谢谢@Frode@user4103233,这是因为您总是将分钟的useMin设置为T02:00:00,除非是当前小时。下面是一个我认为你可以做到的例子:(我清理了一些东西,因为我很无聊……:P)
useMin = 'T' + 
    pad(2 * Math.floor(now.getMinutes() / 5)) + ':' +
    pad(now.getMinutes()) + ':00';