如何在.NET C#中验证日期不是未来日期

4

只是想知道,在 .net c# 中如何验证日期不是未来的日期。

例如:

我已经应用了必填字段验证的验证。但是,我不知道如何应用验证来检查开始日期,以确保它不是未来的日期(日期不大于当前日期)?

  <tr>
        <td align="right">Start Date:</td>
        <td><asp:TextBox runat="server" ID="activeDate" size="8"/>(YYYY-MM-DD)
            <asp:RequiredFieldValidator ID="reqvactiveDate" runat="server"
                 ControlToValidate="activeDate" Display="Dynamic" EnableClientScript="true"
                 ErrorMessage="required" />

        </td>
    </tr>

然后我写了下面的代码来尝试日期验证。但是,日期验证似乎对我无效 :(

    <tr>
        <td align="right">Start Date:</td>
        <td><asp:TextBox runat="server" ID="activeDate" size="8"/>(YYYY-MM-DD)
            <asp:RequiredFieldValidator ID="reqvactiveDate" runat="server"
                 ControlToValidate="activeDate" Display="Dynamic" EnableClientScript="true"
                 ErrorMessage="required" />

            <asp:CustomValidator runat="server"
                ID="valDateRange" 
                ControlToValidate="activeDate"
                onservervalidate="valDateRange_ServerValidate" 
                ErrorMessage="enter valid date" />
        </td>
    </tr> 

代码后台:

   protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args)
   {
       DateTime minDate = DateTime.Parse("1000/12/28");
       DateTime maxDate = DateTime.Parse("2011/05/26");
       DateTime dt;

       args.IsValid = (DateTime.TryParse(args.Value, out dt)
                       && dt <= maxDate
                       && dt >= minDate);
   }

你想在客户端还是服务器端进行验证? - Muhammad Akhtar
@Muhammad Akhtar:我希望它在客户端实现。 - Jin Yong
@M.R.:没有错误显示,但是日期检查的验证不起作用,但是日期必填字段的验证起作用。 - Jin Yong
我已经发布了我的答案。我已在我的端口进行了测试。 - Muhammad Akhtar
3个回答

23

DateTime 实现了 IComparer 接口。检查它是否大于 DateTime.Now

没有必要解析它,只需执行以下操作:

if(datetime1>datetime2)
{
    ....
}

3
我想您是因为这个出错了:DateTime.Parse("1000/12/28")。相反,尝试使用DateTime.MinValue。您也可以选择使用compareValidators..

另外,您为什么不只是做[您的日期]< DateTime.now?


1

以下是我编写的客户端日期值验证代码,确保日期值不在未来:

ASPX 代码:

<tr>
  <td align="right">
    Start Date:
  </td>
  <td>
    <asp:TextBox runat="server" ID="txtActiveDate" size="8"/>(YYYY-MM-DD)
    <!-- Validate if the entered date value is valid -->
    <asp:CompareValidator ID="cvIsActiveDateValid" runat="server"
     ControlToValidate="txtActiveDate"
     ErrorMessage="Invalid Start Date"
     Operator="DataTypeCheck" 
     Type="Date"></asp:CompareValidator>         
    <!-- Validate if the entered value is not future dated -->
    <asp:CompareValidator ID="cvIsActiveDateNotInFuture" runat="server" 
    ControlToValidate="txtActiveDate" 
    ErrorMessage="Start Date cannot be a future date." 
    Operator="LessThanEqual" 
    Type="Date"></asp:CompareValidator>
  </td>
</tr>

ASPX.CS 代码:

protected void Page_Load(object sender, EventArgs e)
{
  SetTodaysDateToCompareValidators();
  ...
}

protected void SetTodaysDateToCompareValidators()
{
  string defaultDateFormat = "YYYY-MM-DD";
  string today = DateTime.Today.ToString(defaultDateFormat);
  cvActiveDate.ValueToCompare = today; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接