1

我正在尝试使用 JavaScript 来验证所选日期不早于今天,但是当我选择今天的日期时,它会显示警报框。

JavaScript:

function checkDueDate(sender, args) {
    var td = new Date(); 
    td.setMinutes(59);
    td.setSeconds(59);
    td.setHours(23);
    //to move back one day
    td.setDate(td.getDate() - 1);

    if (sender._selectedDate < td) {
        alert("You can't select day from the past! " + td + "");
        sender._selectedDate = new Date();
        // set the date back to the current date
        sender._textbox.set_Value(sender._selectedDate.format(sender._format))
    }

ASP.NET:

        <asp:TextBox ID="txtDueDate" runat="server"></asp:TextBox>
        <asp:CalendarExtender ID="txtDueDate_CalendarExtender" runat="server" 
            TargetControlID="txtDueDate" OnClientDateSelectionChanged="checkDueDate">
        </asp:CalendarExtender>

图片

4

3 回答 3

2

我想也许你把事情复杂化了。我会以毫秒为单位减去一天,它应该可以工作:

function isPast( date ) {
  return date.getTime() < (new Date().getTime() - 864e5); 
}

演示:http: //jsbin.com/igeyov/1/edit

于 2012-11-08T05:07:24.263 回答
0

您在这里的逻辑似乎完全符合您的要求 - 您已将您评估的 td 变量设置为今天日期的最后一秒,并且您正在检查所选日期是否早于或等于该日期。今天的日期是“之前或等于”今天 23:59:59...

此外,你已经用 c# 标记了它,尽管据我所知它都是 javascript 和 ASP.net。

于 2012-11-08T05:00:34.083 回答
0

如果您只想选择未来的日期,那么您也可以尝试此代码....这适用于 ajax 日历:

 function checkDate(sender, args) {
        if (sender._selectedDate < new Date()) {
            alert("You can select only future day!");
            sender._selectedDate = new Date();
            // set the date back to the current date
            sender._textbox.set_Value(sender._selectedDate.format(sender._format))
        }
    }

这是HTML代码:

 <asp:TextBox ID="txtDOB" Width="180px" MaxLength="50" runat="server"></asp:TextBox>
                            <ajaxctrl:calendarextender onclientdateselectionchanged="checkDate" id="cale_txtDOB"
                                runat="server" targetcontrolid="txtDOB" format="MM/dd/yyyy" cssclass="cal_Theme1">
                            </ajaxctrl:calendarextender>

仅当您选择过去的日期时,此代码才有效,它会显示一个弹出窗口“您无法选择过去的日期”,无论如何。更新的代码:如果您也不想包括今天的日期,这里是代码工作,您只想要未来的日期:

function checkDate(sender, args) {
        if (sender._selectedDate <= new Date()) {
            alert("You can select only future day!");
            sender._selectedDate = new Date();
            // set the date back to the current date
            //sender._textbox.set_Value(sender._selectedDate.format(sender._format))
        }
    }

希望对你有帮助..

于 2012-11-08T05:03:25.843 回答