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>