How to Validate Forms with ASP.NET MVC 2 Data Annotations: Listing 4.

JavaScript to Perform WithinDays Validation in the Client Browser

    <script type="text/javascript">
      Sys.Mvc.ValidatorRegistry.validators["withindays"] = 
        function (rule) {
        // convert prior and subsequent parameters to 
        // milliseconds(multiply by 86400000).
        var prior = rule.ValidationParameters["prior"] * 86400000;
        var subsequent = (rule.ValidationParameters["subsequent"] 
          + 1) * 86400000;
        // Today's date minus the time component 
        var today = Date.parse((new Date()).toDateString()); 
        var priorDateValue = today + prior; // prior is 
                                                          // already negative
        var subsequentDateValue = today + subsequent;
        // we return the function that 
        // actually does the validation
        return function (value, context) {
        //expected date format: mm/dd/yy or mm/dd/yyyy
        var mdy = value.split("/");
        var mm = parseInt(mdy[0]) - 1; // Note month is zero-based
        var dd = parseInt(mdy[1]);
        var yy = parseInt(mdy[2]);
        yy = yy < 30 ? yy + 2000 : yy; // need to make Y2K behavior 
                                                  // conform with .NET
        // Basic validation for day & month because 
        // JS Date function allows higher/lower values
        // Yes, I know Feb has 29 days only during 
        // leap year ... like I said, basic validation.
        if (mm < 12 && dd <= 
          [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][mm]) {
        var inDate = new Date(yy, mm, dd);
        var inDatevalue = inDate.valueOf();
        if (inDatevalue >= 
          priorDateValue && inDatevalue < subsequentDateValue)
        return true;
        }
        return rule.ErrorMessage;
       };
     };
  </script>