禁用过去的时间

时间:2014-10-15 13:24:47

标签: 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 : 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文件中有哪些更改需要修复从分钟下拉列表中禁用过去时间。

1 个答案:

答案 0 :(得分:1)

对我而言似乎你几乎正在工作..?

如果我正确地看着你的小时选择器的onChange功能,你只需要改变:

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

useMin = 'T' + pad(v.getHours()) + ':' + pad(now.getMinutes()) + ':00';

这有用吗? http://jsfiddle.net/8o23tbLu/27/

编辑:啊,我看到你正在使用一个小技巧,只显示分钟下拉菜单中的分钟数。你可能只是使用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';

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