【问题标题】:Check if two dates are in same month检查两个日期是否在同一个月
【发布时间】:2013-04-01 23:28:37
【问题描述】:

如何检查这两个日期是否在同一年和同一年?我应该使用哪个验证控件来实现这个?我正在考虑使用客户端验证(如果可能的话)

谢谢!

【问题讨论】:

标签: asp.net validation


【解决方案1】:

您可以使用CustomValidator

aspx:

<asp:CustomValidator runat="server"
    ID="valMonth" 
    onservervalidate="ServerValidation" 
    onclientvalidate="ClientValidate"
    ErrorMessage="From and To must be in the same month" />

服务器验证:

protected void ServerValidation (object source, ServerValidateEventArgs args)
{     
    DateTime dtFrom;
    DateTime dtTo;
    if(DateTime.TryParse(TxtFrom.Text, out dtFrom) && DateTime.TryParse(TxtTo.Text, out dtTo)) 
    {
       args.IsValid = dtFrom.Year == dtTo.Year && dtFrom.Month == dtTo.Month;
    }
    else
    {
        args.IsValid = false;
    }
}

您还应该添加两个CompareValidators 来检查两者是否都是有效日期。 要提供ClientValidationFunction,您可以查看getMonthgetFullYear 函数。

例如(未测试):

<script language="javascript">
   <!--
   function ClientValidate(source, arguments)
   {
      var txtFrom = document.getElementById('<%= TxtFrom.ClientID %>');
      var txtTo = document.getElementById('<%= txtTo.ClientID %>');
      var dtFrom = new Date(txtFrom.value);  
      var dtTo = new Date(txtTo.value);  
      var monthFrom = dtFrom.getMonth();
      var monthTo = dtTo.getMonth();
      var yearFrom = dtFrom.getFullYear();
      var yearTo = dtTo.getFullYear();

      arguments.IsValid = yearFrom == yearTo && monthFrom == monthTo;
   }
   // -->
</script>

【讨论】:

    【解决方案2】:

    假设日期采用“dd/MM/yyyy”格式,您可以将此 javascript 函数与自定义验证器一起使用。

    aspx

    <asp:CustomValidator ID="CustomValidator1" runat="server" 
        EnableClientScript="true"
        ErrorMessage="ERROR MESSAGE HERE"
        ClientValidationFunction="checkDate">
    </asp:CustomValidator>
    

    javascript

    function checkDate() {
       var date1=document.getElementById('<%=txtDate1.ClientID%>').value;
       var date2=document.getElementById('<%=txtDate1.ClientID%>').value;
       var date1Values=date1.split("/");
       var date2Values=date2.split("/");
       if (date1Values[2] == date2Values[2] && date1Values[1] ==date2Values[1]) {
         args.IsValid = true;
       }
       else
       {
         args.IsValid = false;
       }
    }
    

    如果禁用了 javascript,您也应该有服务器验证代码。请参阅蒂姆的回答。

    【讨论】:

      【解决方案3】:

      这是一个使用 CustomValidator 控件的简短示例

          Date 1<asp:TextBox ID="txtDate1" runat="server" />
          <br />
          Date 2<asp:TextBox ID="txtDate2" runat="server" />
          <br />
          <asp:Button ID="btnCompare" runat="server" Text="Compare" />
          <asp:CustomValidator ID="dateValidator" runat="server" ErrorMessage="The two dates must be in the same month and year"
              OnServerValidate="ValidateDate" />
          <script runat="server">
              protected void ValidateDate(object source, ServerValidateEventArgs args)
              {
                  DateTime date1 = DateTime.Parse(txtDate1.Text);
                  DateTime date2 = DateTime.Parse(txtDate2.Text);
      
                  if (date1.Month != date2.Month || date1.Year != date2.Year)
                      args.IsValid = false;
              }
          </script>
      

      【讨论】:

        猜你喜欢
        • 2018-02-01
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多