diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php
index dadf5d12e616a5c2d7d53267ba13195c161a19bb..0fc418cf93d694629b904d2732d85379f6070300 100644
--- a/ecrire/lang/spip_fr.php
+++ b/ecrire/lang/spip_fr.php
@@ -288,6 +288,8 @@ le site "@nom_site_spip@" (@adresse_login@) :',
 	'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.',
 	'form_prop_sujet' => 'Sujet',
 	'form_prop_url_site' => 'Adresse URL du site',
+	'format_date_incorrecte' => 'La date ou son format est incorrect',
+	'format_heure_incorrecte' => 'L’heure ou son format est incorrect',
 	'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.',
 	'forum_par_auteur' => 'par @auteur@',
 	'forum_titre_erreur' => 'Erreur...',
diff --git a/prive/formulaires/dater.php b/prive/formulaires/dater.php
index 8e44e55a420c6fbf173fdcf748ac8dbd60bc5575..2aa1e40e24751bec6ba79406102eab7f9cc5c1a3 100644
--- a/prive/formulaires/dater.php
+++ b/prive/formulaires/dater.php
@@ -318,11 +318,11 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $option
 }
 
 /**
- * Récupérer annee,mois,jour sur la date saisie
+ * Récupérer annee, mois, jour sur la date saisie
  *
  * @param string $post
  * @param string $quoi
- * @return array
+ * @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon.
  */
 function dater_recuperer_date_saisie($post, $quoi = 'date') {
 	if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) {
@@ -335,13 +335,13 @@ function dater_recuperer_date_saisie($post, $quoi = 'date') {
 
 		return array($regs[3], $regs[2], $regs[1]);
 	} else {
-		$t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]);
-		// si la date n'est pas valide selon mktime, la refuser
-		if (!$t) {
-			return '';
+		if (
+			checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3]))
+			and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3])
+		) {
+			return array(date('Y', $t), date('m', $t), date('d', $t));
 		}
-
-		return array(date('Y', $t), date('m', $t), date('d', $t));
+		return '';
 	}
 }
 
@@ -355,6 +355,9 @@ function dater_recuperer_heure_saisie($post) {
 	if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) {
 		return '';
 	}
+	if ($regs[1] >= 23 or $regs[2] >= 59) {
+		return '';
+	}
 
 	return array($regs[1], $regs[2]);
 }