Thierry
*************************************************************
Cette fonction retourne un objet date javascript ou false si erreur.
Description :
- UneDate : type texte, format JJ/MM/AAAA
- UneHeure : type texte, format HH:MM
- Au moins un paramétre est obligatoire.
- Si paramètre UneDate uniquement : retourne la date spécifiée et l'heure à 00:00:00
- Si paramètre UneHeure uniquement : retourne la date du jour à l'heure spécifiée (secondes à 00)
- Si deux paramètres : retourne date et heure spécifiées (secondes à 00)
*************************************************************
- Code : Tout sélectionner
function CreatDateHeure(UneDate,UneHeure) {
/* Quelques éléments de cette fonction sont repris d'une fonction trouvée je ne sais plus où...*/
/* ... donc merci à son auteur.*/
/****************************************************************************************************
Cette fonction retourne un objet date javascript ou false si erreur.
Description :
- UneDate : type texte, format JJ/MM/AAAA
- UneHeure : type texte, format HH:MM
- Au moins un paramétre est obligatoire.
- Si paramètre UneDate uniquement : retourne la date spécifiée et l'heure à 00:00:00
- Si paramètre UneHeure uniquement : retourne la date du jour à l'heure spécifiée (secondes à 00)
- Si deux paramètres : retourne date et heure spécifiées (secondes à 00)
*****************************************************************************************************/
/* Nom de la fonction */
this.name = 'CreatDateHeure(date,heure)'
/* Contrôle qu'au moins un paramètre a été passé dans la fonction*/
if (UneDate+UneHeure == '') {
msgErr = 'Erreur fonction \"'+this.name+'\" : au moins un paramètre (date ou heure) est obligatoire !'
msgErr += '\rFormat de la date = JJ/MM/AAAA'
msgErr += '\rFormat de l\'heure = HH:MM'
alert(msgErr)
return false;
} else {
/* Traitement de la date */
if(UneDate !='') {
/* Contrôle si la date est cohérente par rapport au calendrier (grégorien), */
/* années bisextiles incluses */
var dt=UneDate
var msgErrFormat = 'Veuillez saisir la date au format JJ/MM/AAAA';
/* Contrôle la longueur de la chaîne = 10 caractères */
if (dt.length != 10) {
alert(msgErrFormat)
return false;
}
/* Contrôle le format de la chaine = JJ/MM/AAAA (caractères numérique et /) */
var re = /\d{2}\/{1}\d{2}\/{1}\d{4}/
if ( !re.test(dt) ) {
alert(msgErrFormat)
return false;
}
/* Jour : extrait et converti en valeur numérique */
var jj = parseInt(dt.substring(0, 2),10);
/* Mois : extrait et converti en valeur numérique */
var mo = parseInt(dt.substring(3, 5),10);
/* Année : extrait et converti en valeur numérique */
var aaaa = parseInt(dt.substring(6, 10),10);
var err=0
/* Contrôle l'année : de 1800 à 9999 */
if (aaaa<0000 || aaaa>9999 || isNaN(aaaa) ) err = 1
/* Contrôle le mois : de 1 à 12 */
if (mo<1 || mo>12 || isNaN(mo) ) {err = 2} ;
/* Contrôle le jour : mois de février (année bissextile ou non)*/
if (mo==2) {
/* Une année est bissextile si elle est divisible par 4, sauf si elle est divisible par 100 tout en ne l'étant pas par 400. */
/* anneeBissextile retourne true ou false */
var anneeBissextile = (aaaa%4==0 && aaaa%100!=0 || aaaa%400==0);
if (anneeBissextile) {
if (jj>29) {err=3}
} else {
if (jj>28) {err=4}
}
}
/* Contrôle le jour : mois de 30 jours*/
if (mo==4 || mo==6 || mo==9 || mo==11) {
if (jj==31) {err=5};
}
/* Contrôle le jour : mois de 31 jours */
if (jj<1 || jj>31|| isNaN(jj) ) {err = 6};
/* Messages d'erreurs */
if (err==1) {
alert('L\'année '+aaaa+' est erronée !')
return false;
}
if (err==2) {
alert('Le mois est erroné !')
return false;
}
if (err==3 || err==4 ) {
var d = new Date();
var anneeCourante = d.getFullYear();
var verbe = '';
if (aaaa == anneeCourante) {verbe = 'a'}
if (aaaa > anneeCourante) {verbe = 'aura' }
if (aaaa < anneeCourante) {verbe = 'avait'}
if (err==3) {
alert('En '+aaaa+', le mois de février (02) n\''+verbe+' que 29 jours !')
return false;
}
if (err==4) {
alert('En '+aaaa+', le mois de février (02) n\''+verbe+' que 28 jours !')
return false;
}
}
if (err==5 || err==6) {
/* Tableau des mois */
var moisTxt = new Array('de janvier','de février','de mars','d\'avril','de mai','de juin','de juillet','d\'août','de septembre','d\"octobre','de novembre','de décembre' )
if (err==5) {
alert('Le mois '+moisTxt[mo-1]+' ('+dt.substring(3, 5)+') n\'a que 30 jours !')
return false;
}
if (err==6) {
alert('Le mois '+moisTxt[mo-1]+' ('+dt.substring(3, 5)+') n\'a que 31 jours !')
return false;
}
}
/* Retourne un objet javascript date et heure : format AAAA MM JJ HH:MM:00 */
DateHeure = new Date(aaaa,mo-1,jj);
};
/* Traitement de l'heure */
if (UneHeure !='') {
hr=UneHeure
msgErrFormat = 'Veuillez saisir l\'heure au format HH:MM';
/* Contrôle la longueur de la chaîne = 10 caractères */
if (hr.length != 5) {
alert(msgErrFormat)
return false;
}
/* valide une heure passée au format HH:MM */
re =/\d{2}\:{1}+\d{2}/
if( !re.test(hr) ) {
alert(msgErrFormat)
return false;
};
/* Contrôle si l'heure est cohérente */
var err=0
/* Extrait l'heure, la convertie en valeur numérique */
hh = parseInt(hr.substring(0, 2),10)
/* Extrait les minutes, les converties en valeur numérique */
mm = parseInt(hr.substring(3, 5),10)
/* Contrôle l'heure : inférieure ou égale à 23 */
if (hh >23 || isNaN(hh) ) {err = 10};
/* Contrôle les minutes : inférieure ou égale à 59 */
if (mm >59 || isNaN(mm) ) {err = 11};
/* Messages d'erreurs */
if (err==10) {
alert('L\'heure est erronée (00 à 23) !')
return false;
};
if (err==11) {
alert('Les minutes sont erronées (00 à 59) !')
return false;
};
/* Retourne un objet javascript date et heure : format AAAA MM JJ HH:MM:SS */
/* Si pas de date spécifiée = date du jour et heure spécifiée */
if(UneDate =='') {
today = new Date()
today.setHours(hh)
today.setMinutes(mm)
today.setSeconds(00)
DateHeure = today;
} else {
/* Si date spécifiée = date et heure spécifiées */
DateHeure = new Date(aaaa,mo-1,jj,hh,mm);
}
};
return DateHeure;
};
}