I used to search over the web for a AS3 date validator back then and after spending some time searching and trying, I am going to share the class that I have written in the past with you. XD
(Note: By the way I have added a bit of extra stuff in the AS3 file. Take a look and it might turn out to be pretty handy in code writing in the future. :D)
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="creationCompleteHandler(event)"> <mx:Script> <![CDATA[ import com.date.DateChecker; import mx.events.FlexEvent; //String to store the minimum year private var tempTxtMin:Number; //This function will be executed onve the button have //been clicked. protected function button1ClickEvent(event:MouseEvent):void { if(txtMin.text == "") { tempTxtMin = -1; }else{ tempTxtMin = Number(txtMin.text); } //The following will check the given fields and //check if they were valid dates. lblResult.text = digestErrorIntoString( DateChecker.shortStrDateChecker(txtDay.text, txtMonth.text, txtYear.text, tempTxtMin)); lblResult1.text = digestErrorIntoString( DateChecker.strDateChecker(txtDate.text, "/", tempTxtMin)); lblResult2.text = digestErrorIntoString( DateChecker.strDateChecker(txtDate1.text, "-", tempTxtMin)); } //Base on the the result that you are getting in //DateChecker.strDateChecker or DateChecker.shortStrDateChecker //output a string for the respective results private function digestErrorIntoString(error:int):String { var resultStr:String = ""; switch(error) { case 0: resultStr = "This is a valid Date."; break; case 1: resultStr = "Please enter a numeric number " + "for the day of the month."; break; case 2: resultStr = "Please enter a numeric number " + "for the month of the year."; break; case 3: resultStr = "Please enter a numeric number " + "for the year that you are query."; break; case 4: resultStr = "Please enter a date between 1 - 31."; break; case 5: resultStr = "Please enter a month between 1 - 12."; break; case 6: resultStr = "Please enter a year that is greater " + "than " + String(tempTxtMin) + "."; break; case 7: resultStr = "This date doesn't exist."; break; case 8: resultStr = "Please enter the date according to the" + " format that was shown in the above."; break; } return resultStr; } //Upon Creation Complete of this class, populate some content. //And do a check on the fields. protected function creationCompleteHandler(event:FlexEvent):void { // TODO Auto-generated method stub txtMin.text = "1960"; txtDay.text = "9"; txtMonth.text = "8"; txtYear.text = "1965"; txtDate.text = "9/8/1959"; txtDate1.text = "30-2-2012"; button1ClickEvent(null); } ]]> </mx:Script> <mx:VBox width="100%" height="100%" verticalGap="10" horizontalAlign="center" verticalAlign="middle"> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Minimum Year Allow:"/> <mx:TextInput id="txtMin" restrict="0-9" maxChars="4"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Enter a date:"/> <mx:TextInput id="txtDay" restrict="0-9" maxChars="2"/> <mx:Label text="/"/> <mx:TextInput id="txtMonth" restrict="0-9" maxChars="2"/> <mx:Label text="/"/> <mx:TextInput id="txtYear" restrict="0-9" maxChars="4"/> <mx:Label text="(Ex: DD/MM/YYYY)"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Result of the above:"/> <mx:Label id="lblResult"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Enter a date:"/> <mx:TextInput id="txtDate" restrict="0-9/"/> <mx:Label text="(Ex: DD/MM/YYYY)"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Result of the above:"/> <mx:Label id="lblResult1"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Enter a date:"/> <mx:TextInput id="txtDate1" restrict="0-9 \-"/> <mx:Label text="(Ex: DD-MM-YYYY)"/> </mx:HBox> <mx:HBox width="100%" horizontalAlign="center" horizontalGap="0"> <mx:Label text="Result of the above:"/> <mx:Label id="lblResult2"/> </mx:HBox> <!-- Upon clicking on this button, run the event 'button1ClickEvent'--> <mx:Button label="Check Now" click="button1ClickEvent(event)"/> </mx:VBox> </mx:Application>
and here comes the AS3 Date checker class
package com.date { public class DateChecker { public function DateChecker() { } /** * Used to check if the given string is a valid date * @param str - the string than you are checking * for a valid date * @param divider - a string that will be used as a * divider for str * @param minYear - the minimum year than the user * can enter * @return one of the below integer (0-8) ** Click here to view the demo of this example.
0 - valid date *
1 - Invalid day (day must be a numerical value) *
2 - Invalid Month (month must be a numerical value) *
3 - Invalid Year (year must be a numerical value) *
4 - Invalid day (day must be in a range of 1 - 31) *
5 - Invalid Month (month must be in a range of 1-12) *
6 - Invalid Year (year must be > than the * minYear specified) *
7 - Date doesn't exist *
8 - the paramter str is not in the correct format */ public static function strDateChecker(str:String, divider:String = "/", minYear:Number = -1):int { var _strArray:Array = String(str).split(divider); //If the array has more than 3 items (e.g. 11/11/20/11) //it is not a valid date format, return error code 8 if(_strArray.length != 3) { return 8; }else{ return shortStrDateChecker(_strArray[0], _strArray[1], _strArray[2], minYear); } } /** * Used to check if the given strings turn out to be * a valid date * @param day - the day of the date that you are checking * in string format * @param month - the month of the date that you are checking * in string format * @param year - the year of the date that you are checking * in string format * @param minYear - the minimum year than the user * can enter * @return one of the below integer (0-8) *
0 - valid date *
1 - Invalid day (day must be a numerical value) *
2 - Invalid Month (month must be a numerical value) *
3 - Invalid Year (year must be a numerical value) *
4 - Invalid day (day must be in a range of 1 - 31) *
5 - Invalid Month (month must be in a range of 1-12) *
6 - Invalid Year (year must be > than the * minYear specified) *
7 - Date doesn't exist *
8 - the paramter day, month and * year is not given in the correct format */ public static function shortStrDateChecker(day:String, month:String, year:String, minYear:Number = -1):int { var _day:Number = Number(day); var _month:Number = Number(month); var _year:Number = Number(year); var _date:Date = new Date(); //if all 3 given parameters are either strings //or empty, return error code 8 if((isNaN(_day) || day == "") && (isNaN(_month) || month == "") && (isNaN(_year) || year == "")) { return 8; } //if given date is a String, return error code 1 if(isNaN(_day)) { return 1; } //if given month is a String, return error code 2 if(isNaN(_month)) { return 2; } //if given year is a String, return error code 3 if(isNaN(_year)) { return 3; } _month = Number(_month - 1); //if given day is a > 31 and < 0, return error code 4 if(_day > 31 || _day <= 0) { return 4; } //if given month is a > 12 and < 0, return error code 5 if(_month > 11 || _month < 0) { return 5; } //if given year is bigger than minYear, return error code 6 if(minYear != -1) { if(_year < minYear) { return 6; } } _date.fullYear = _year; _date.month = _month; _date.date = _day; //if the temp date and the given date doesn tally //, return error code 7 if(_date.date != _day || _date.month != _month || _date.fullYear != _year) { return 7; } return 0; } } }
^ Click here for the source files of this demo.