Form Validation - Date Method

Value should be a valid date
diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php
index 3bc4515..1230ce5 100644
--- a/system/language/english/form_validation_lang.php
+++ b/system/language/english/form_validation_lang.php
@@ -55,6 +55,7 @@
 $lang['form_validation_greater_than_equal_to']	= 'The {field} field must contain a number greater than or equal to {param}.';
 $lang['form_validation_between']		= 'The {field} field must contain a number between {param}.';
 $lang['form_validation_in']		= 'The {field} field must be within a predetermined list: {param}.';
+$lang['form_validation_date']		= 'The {field} field must be a proper date.';
 
 /* End of file form_validation_lang.php */
 /* Location: ./system/language/english/form_validation_lang.php */
\ No newline at end of file
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index e98c87f..3e8204e 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -1475,6 +1475,31 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Value should be a valid date
+	 *
+	 * @param	string
+	 * @return	bool
+	 */
+	public function date($date)
+	{
+		if (strtotime($date) === FALSE)
+		{
+			return FALSE;
+		}
+
+		if ($date instanceof DateTime)
+		{
+			return TRUE;	
+		}
+
+		$date = date_parse($date);
+
+		return checkdate($date['month'], $date['day'], $date['year']);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Is a Natural number  (0,1,2,3, etc.)
 	 *
 	 * @param	string
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 3f6e490..3f72369 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -964,6 +964,7 @@
                                      or not numeric.
 **between**               Yes        Returns FALSE if the form element is not within the given range.                              between[10,20]
 **in**                    Yes        Returns FALSE if the form element is not within a predetermined list.                         in[red,blue,green]
+**date**                  No         Returns FALSE if the form element is not a proper date.
 **alpha**                 No         Returns FALSE if the form element contains anything other than alphabetical characters.
 **alpha_numeric**         No         Returns FALSE if the form element contains anything other than alpha-numeric characters.
 **alpha_numeric_spaces**  No         Returns FALSE if the form element contains anything other than alpha-numeric characters