diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php
index 5c1af91717efff0cdc5d585e0ecd1c8a8ec3970c..397e7dc733e4b64d3c0ab2c5c33fa371f7ba6abd 100644
--- a/extension/qfq/qfq/Constants.php
+++ b/extension/qfq/qfq/Constants.php
@@ -187,6 +187,7 @@ const ERROR_MAX_FILE_SIZE_TOO_BIG = 1082;
 const ERROR_SMALLER_THAN_MIN = 1083;
 const ERROR_LARGER_THAN_MAX = 1084;
 const ERROR_INVALID_DECIMAL_FORMAT = 1085;
+const ERROR_INVALID_DATE = 1086;
 
 // Subrecord
 const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1100;
diff --git a/extension/qfq/qfq/store/FillStoreForm.php b/extension/qfq/qfq/store/FillStoreForm.php
index a4a6c9f4fc58d256c65370826d337eabc7da411f..bd36ddc288482ef6c6bf3e269d8104b952c7aca0 100644
--- a/extension/qfq/qfq/store/FillStoreForm.php
+++ b/extension/qfq/qfq/store/FillStoreForm.php
@@ -319,9 +319,17 @@ class FillStoreForm {
             throw new UserFormException("DateTime format not recognized: $placeholder / $value ", ERROR_DATE_TIME_FORMAT_NOT_RECOGNISED);
         }
 
-        $showTime = $formElement[FE_TYPE] == 'date' ? '0' : '1';
+        $showTime = $formElement[FE_TYPE] == FE_TYPE_DATE ? '0' : '1';
         $value = Support::convertDateTime($value, FORMAT_DATE_INTERNATIONAL, '1', $showTime, $formElement[FE_SHOW_SECONDS]);
 
+        if ($formElement[FE_TYPE] !== FE_TYPE_TIME) {
+            // Validate date (e.g. 2010-02-31)
+            $dateValue = explode(' ', $value)[0];
+            $dateParts = explode('-', $dateValue);
+            if (!checkdate($dateParts[1], $dateParts[2], $dateParts[0]))
+                throw new UserFormException("$dateValue is not a valid date.", ERROR_INVALID_DATE);
+        }
+
         return $value;
     }
 }
\ No newline at end of file