Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérification cohérence de date

8 réponses
Avatar
Alain BARTHE
Bonjour,

J'aurais besoin de vérifier, en Javascript, la saisie d'une date dans un
formulaire PHP.

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien sur
isoler année, mois et jour forme une date correcte.

Je suppose que la question est classique, voire déjà traitée, mais j'ai
regardé sur le net et j'ai trouvé des quantités de scripts, allant de
quelques lignes à plus de 600, sans savoir lequel choisir.

Y-a-t'il une solution, une librairie, qui s'impose plus ou moins?

NB : Je peux éventuellement utiliser JQuery, que je j'utilise déjà dans
une autre partie de mon site.

Alain

8 réponses

Avatar
Pascal
Alain BARTHE a écrit :
Bonjour,



Bonjour,

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien su r
isoler année, mois et jour forme une date correcte.



Sans aller dans des bibliothèques compliquées, mais qui peut-être g èrent
davantage de choses, on peut partir de principes simples :

1. Le constructeur Date retourne toujours des dates valides.
2. Pour valider une date saisie, il suffit donc de la comparer à une
date construite sur les mêmes composantes.

j'ai fait ça rapido, alors il faut sûrement perfectionner, mais les
principes sont là : http://www.copypastecode.com/28846/

Cordialement,
Pascal
Avatar
Alain BARTHE
Pascal a écrit :
Alain BARTHE a écrit :
Bonjour,



Bonjour,

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien sur
isoler année, mois et jour forme une date correcte.



Sans aller dans des bibliothèques compliquées, mais qui peut-être gèrent
davantage de choses, on peut partir de principes simples :

1. Le constructeur Date retourne toujours des dates valides.
2. Pour valider une date saisie, il suffit donc de la comparer à une
date construite sur les mêmes composantes.

j'ai fait ça rapido, alors il faut sûrement perfectionner, mais les
principes sont là : http://www.copypastecode.com/28846/

Cordialement,
Pascal



Merci, ça semble effectivement simple et efficace.
Avatar
SAM
Le 5/16/10 6:36 PM, Alain BARTHE a écrit :
Bonjour,

J'aurais besoin de vérifier, en Javascript, la saisie d'une date dans un
formulaire PHP.

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien sur
isoler année, mois et jour forme une date correcte.



yyy-mm-dd ou jj-mm-aaaa ?

vérifier quoi ?
que ce n'est pas le 30 février ?
ou le 31 avril ?

en supposant qu'on a déjà vérifié que le champs contenait le nbre de
caractères requis et le bon séparateur et que le début est bien l'année

function dateOk() {
var d = document.forms[0]['date'],
d1 = d.value.split('-');
if(d1.length == 3) {
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
y = d2.getFullYear(),
m = d2.getMonth()+1,
j = d2.getDate();
if(j<10) j = '0'+j;
if(m<10) m = '0'+m;
if(d.value != y+'-'+m+'-'+j) alert('date erreur');
}
else alert('erreur format date (séparateur: -)');
}

Sinon qque chose qui vérifie le 28 février, le 31 avril,
et rentre la date au bon format même si était: 99/2/7
(séparateurs acceptés : / . _ espace - )

function dateOk() {
var d = document.forms[0]['date'],
d1 = d.value.split(/[./_s-]/);
if(d1.length == 3) {
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
y = d2.getFullYear(),
m = d2.getMonth()+1,
j = d2.getDate();
if(m > d1[1]) {
alert('il n'y a pas '+d1[2]+' jours au mois '+d1[1]);
return;
}
if(j<10) j = '0'+j;
if(m<10) m = '0'+m;
d.value = y+'-'+m+'-'+j;
}
else alert('erreur format date (séparateur: -)');
}

--
sm
Avatar
Dr J R Stockton
En fr.comp.lang.javascript message <4bf03bbe$0$2872$
r>, 16 May 2010 20:38:54, Alain BARTHE a
écrit :

Pascal a écrit :
Alain BARTHE a écrit :
Bonjour,


Bonjour,

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien
sur isoler année, mois et jour forme une date correcte.


Sans aller dans des bibliothèques compliquées, mais qui peut-être
gèrent davantage de choses, on peut partir de principes simples :
1. Le constructeur Date retourne toujours des dates valides.
2. Pour valider une date saisie, il suffit donc de la comparer à une
date construite sur les mêmes composantes.
j'ai fait ça rapido, alors il faut sûrement perfectionner, mais les
principes sont là : http://www.copypastecode.com/28846/
Cordialement,
Pascal



Merci, ça semble effectivement simple et efficace.



It looks unnecessarily complicated. Match the pattern with a RegExp
(ensuring 00<Ý<™), use new Date(Y, M', D), and check getMonth().

See in <URL:http://www.merlyn.demon.co.uk/js-date4.htm#DVal>,
"String Input" and onwards.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.

--
(c) John Stockton, nr London UK. ?@merlyn.demon.co.uk IE8 FF3 Op10 Sf4 Cr4
news:comp.lang.javascript FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Avatar
Alain BARTHE
Dr J R Stockton a écrit :
En fr.comp.lang.javascript message <4bf03bbe$0$2872$
r>, 16 May 2010 20:38:54, Alain BARTHE a
écrit :

Pascal a écrit :
Alain BARTHE a écrit :
Bonjour,


Bonjour,

Je veux juste vérifier que ma chaine yyyy-mm-dd, dont je peux bien
sur isoler année, mois et jour forme une date correcte.


Sans aller dans des bibliothèques compliquées, mais qui peut-être
gèrent davantage de choses, on peut partir de principes simples :
1. Le constructeur Date retourne toujours des dates valides.
2. Pour valider une date saisie, il suffit donc de la comparer à une
date construite sur les mêmes composantes.
j'ai fait ça rapido, alors il faut sûrement perfectionner, mais les
principes sont là : http://www.copypastecode.com/28846/
Cordialement,
Pascal


Merci, ça semble effectivement simple et efficace.



It looks unnecessarily complicated. Match the pattern with a RegExp
(ensuring 00<Ý<™), use new Date(Y, M', D), and check getMonth().

See in <URL:http://www.merlyn.demon.co.uk/js-date4.htm#DVal>,
"String Input" and onwards.

It's a good idea to read the newsgroup c.l.j and its FAQ. See below.



I made a short try with ISOSDateValue() found in js-date4.htm
and it works perfectly.

Many thanks for your help.
Avatar
Pierre Goiffon
On 16/05/2010 18:36, Alain BARTHE wrote:
J'aurais besoin de vérifier, en Javascript, la saisie d'une date dans un
formulaire PHP.



Votre besoin est sans doute répondu par ce qui a été indiqué dans ce fil.
Je voulais juste signaler la librairie ici :
http://www.javascripttoolbox.com/lib/date/documentation.php
Nous l'avons intégrée dans nos produit à mon travail et je conseille
vivement !
Avatar
Dr J R Stockton
En fr.comp.lang.javascript message <4bf0b8f8$0$2955$
.orange.fr>, Lun, 17 May 2010 05:33:12, SAM
adoo.fr.invalid> a écrit:

en supposant qu'on a déjà vérifié que le champs contenait le nbre de
caractères requis et le bon séparateur et que le début est bien l'année

function dateOk() {
var d = document.forms[0]['date'],
d1 = d.value.split('-');
if(d1.length == 3) {
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
y = d2.getFullYear(),
m = d2.getMonth()+1,
j = d2.getDate();
if(j<10) j = '0'+j;
if(m<10) m = '0'+m;
if(d.value != y+'-'+m+'-'+j) alert('date erreur');
}
else alert('erreur format date (séparateur: -)');
}




function dateOk() {
var d = document.forms[0]['date'],
d1 = d.value.split('-'); // meilleure avec une RegExp
if(d1.length == 3) {
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
// y = d2.getFullYear(),
m = d2.getMonth()+1 // ,
// j = d2.getDate();
// if(j<10) j = '0'+j;
// if(m<10) m = '0'+m;
// if(d.value != y+'-'+m+'-'+j)
/* + */ if (d1[1] != m)
alert('date erreur'); // qu'il reste
}
else alert('erreur format date (séparateur: -)');
}

--
(c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike v6.05.
Web <URL:http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
PAS EXE etc : <URL:http://www.merlyn.demon.co.uk/programs/> - see 00index.htm
Dates - miscdate.htm estrdate.htm js-dates.htm pas-time.htm critdate.htm etc.
Avatar
SAM
Le 5/18/10 7:41 PM, Dr J R Stockton a écrit :
En fr.comp.lang.javascript message <4bf0b8f8$0$2955$
.orange.fr>, Lun, 17 May 2010 05:33:12, SAM
adoo.fr.invalid> a écrit:

en supposant qu'on a déjà vérifié que le champs contenait le nbre de
caractères requis et le bon séparateur et que le début est bien l'année




(...)

function dateOk() {
var d = document.forms[0]['date'],
d1 = d.value.split('-'); // meilleure avec une RegExp



absolutly

if(d1.length == 3) {
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
// y = d2.getFullYear(),
m = d2.getMonth()+1 // ,
// j = d2.getDate();
// if(j<10) j = '0'+j;
// if(m<10) m = '0'+m;
// if(d.value != y+'-'+m+'-'+j)
/* + */ if (d1[1] != m)
alert('date erreur'); // qu'il reste



yes

}
else alert('erreur format date (séparateur: -)');
}



Oui il y a pas mal de choses inutiles,
cependant les compléments sont là pour permettre d'aller un peu plus
loin comme de corriger la date directement dans le champ.

'y' and 'd' above where to allow to go further
in this idea, field accepts : 10/5/19
(expecting yet that the date format is not in french)
and the function re-enter the date in wanted format,
something like that :

function dateOk() {
var d = document.forms[0]['date'],
d0 = d.value,
d1 = d0.split(/[./_s-]/); // a bit of regexp
// much better : d0.split(/D+/);
if(d1.length == 3) {
if(d1[0].length==2)
d1[0] = prompt('L'année est bien : 20'+d1[0]+
' ?nSimon corrigez ci-dessous','20'+d1[0]);
var d2 = new Date(d1[0], (d1[1]-1), d1[2]),
y = d2.getFullYear(),
m = d2.getMonth()+1,
j = d2.getDate(),
c = ['','janvier','février','mars','avril','mai','juin','juillet',
'aout','septembre','octobre','novembre','décembre'];
if(m > d1[1]) {
alert('il n'y a pas '+d1[2]+' jours au mois de '+c[d1[1]]);
d.focus(); d.select();
return;
}
if(j<10) j = '0'+j;
if(m<10) m = '0'+m;
d.value = y+'-'+m+'-'+j;
}
else alert('erreur format daten( AAAAA-MM-JJ )');
if(d0 != d.value) alert('contrôlez bien votre date !');
}

--
sm