Problème Fonction Date()

Résolu
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005 - 10 juin 2005 à 19:50
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005 - 11 juin 2005 à 20:18
Bonjour,





j'utilise une fonction Javascript pour formater une date et la
modifier. Or les fonctions de date ne me renvoient pas la valeur voulue
!


la valeur de la date en entree est de type : 20050531000000000,
représentant yyyyMMddhhmmss... les trois derniers carateres etant les
millisecondes. Lorsque la date correspond au 31 de n'importe quel mois,
le formatage ne fonctionnepas correctement.


voici un extrait du code Javascript utilisé :


var date = document.forms[0].elements["valeurDate"];
var inputDate = date.value;
var inputDateForm = new Date();
inputDateForm.setDate(inputDate.substring(6,8));
inputDateForm.setMonth(inputDate.substring(4,6)-1); /* range = 0 - 11 */
inputDateForm.setYear(inputDate.substring(0,4));
inputDateForm.setHours(00);
inputDateForm.setMinutes(00);
inputDateForm.setSeconds(00);

alert(inputDateForm.getDate());



Lorsqu'apparait a l'ecran la valeur de




inputDateForm.getDate()



si la valeur de depart etait un jour = à 31, la valeur stockée est de 1 au lieu de 31 !

pourtant cette fonction est sensée fonctionner de 1 à 31...

et si je teste et entre une valeur de jour = à 00 ou 0, là la date sera fixée à 31.




Pouvez-vous m'aider ?

d'avance merci.

12 réponses

Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 20:07
Excuse, j'ai confondu (les dates PHP et JavaScript 1-12 et 0->11)
Correction:
--> le 31 juin n'existe pas --> la valeur 1 est stockée par défaut!

J'espère que ça marche maintenant.

Il faut respecter l'ordre suivant: année,mois,jour.

inputDateForm.setYear(inputDate.substring(0,4));
inputDateForm.setMonth((inputDate.substring(4,6))-1);
inputDateForm.setDate(inputDate.substring(6,8));

ou bien tu fait directement en une seule ligne:
var inputDateForm = new Date(inputDate.substring(0,4), inputDate.substring(4,6)-1, inputDate.substring(6,8));

N'oublies pas d'accepter ma reponse si ok. Merci.
3
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
10 juin 2005 à 22:21
Ok, ne te tracasse plus.
Tu as bien travaillé!
Mais...attention les parenthèses!

Voici la correction de la 5me ligne:
inputDateForm.setMonth((inputDate.substring(4,6))-1); /* range = 0 - 11 */

Bonne continuation.
Visit me: http://sabena.bizhat.com/
0
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005
10 juin 2005 à 22:43
Merci



La correction est utile mais ne regle pas mon probleme principal , puisque le getDate() renvoie toujours 1 au lieu de 31 :(



++

Padam90
0
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 00:29
En fait ce qui nous embête dans le programme ce sont les zéros qui précédent les mois et les jours (dans ce cas-ci 05). Je ne sais pas s'il existe une instruction en JavaScript qui convertit un string en entier.
Sinon in faut revoir tout ton code de a à z.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005
11 juin 2005 à 10:53
non, les mois ne posent aucun problème : j'ai testé le code avec des
"alert" pour voir ce qui était récupéré, et ensuite ce qui était inséré
dans ma date.

Ce sont les jours qui sont mal pris en compte !

de 1 à 30 ils sont corrects mais pour 31 cela ne fonctionne pas ! par contre si on remplace 31 par 0, cela fonctionne !

Alors que la fonction a un range de 1 à 31 !



++

Padam90
0
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 11:52
J'ai enfin compris ce qui ne va pas.
Il faut respecter l'ordre suivant: année,mois,jour.

inputDateForm.setYear(inputDate.substring(0,4));
inputDateForm.setMonth((inputDate.substring(4,6))-1);
inputDateForm.setDate(inputDate.substring(6,8));


Bonne continuation.
Visit me: http://sabena.bizhat.com/
0
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 12:39
Je vais t'expliquer ce qui n'allait pas.
Supposons que nous sommes le 11 juin 2005.
En fait quand tu fait: var inputDateForm = new Date();
-- > Year=2005, Month=5=Juin, Date=11 /* range = 0 - 11 */

Ensuite tu fait: inputDateForm.setDate(inputDate.substring(6,8));
Dans l'exemple que tu donnes 20050531000000000
Year=2005, Month=5-1=Mai, Date=31 /* range = 0 - 11 */
--> le 31 Mai n'existe pas --> la valeur 1 est stockée par défaut!

T'as compris?
0
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005
11 juin 2005 à 18:54
Ben je dois avouer que l'idee etait bonne mais le 31 mai existe bel et bien

31 avril n'existe pas mais 31 mai, si !!

et par contre je ne vois pas ce que ça change de le faire dans l'ordre année mois jour...
0
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005
11 juin 2005 à 19:05
En fait ce que je ne comprends pas c'est pourquoi la fonction Javascript ne renvoie pas les bonnes valeurs :

je m'explique :



quand je fais un inputDateForm.setDate("1"),

si j'affiche inputDateForm.getDate(), j'obtiens 1.

si je fais inputDateForm.setDate("12") (ou n'importe quelle valeur entre 1 et 30)

il renvoie 12 (ou la valeur passee entre 1 et 30)



Mais si je fais inputDateForm.setDate("31"),

il renvoie 1 !!!

et si je fais inputDateForm.setDate("0"=, ou inputDateForm.setDate("00"),

il renvoie 31 !!!!



on dirait que la fonction "marche" pour des valeurs entre 1 et 30, et
qu'il faut utiliser 0 au lieu de 31 pour obtenir le 31 du mois (si ce
mois possede bien 31 jours !)

alors je ne comprends plus
0
padam90 Messages postés 6 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 11 juin 2005
11 juin 2005 à 20:12
Oui merci !!

avec ton message j'ai cherché avec un ami et on a trouve ce que tu voulais dire :)

en fait je pense que si on ne specifie pas le mois avant il doit
prendre le mois courant et du coup forcement pas de 31 juin :) je
comprends :)



merci pour le coup de main !!!



++

Padam90
0
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 20:16
J'ai essayé sur mon PC.
Ca marche comme sur des roulettes!
Fait copier/coller pour tester le code ci dessous:
n'oublies pas les dates PHP et JavaScript (1-12 et 0->11)

<html>
<head>
<title>TEST</title>
</head>
<script language="javascript">
var inputDate = "20050531000000000";
var inputDateForm = new Date(inputDate.substring(0,4), inputDate.substring(4,6)-1, inputDate.substring(6,8));
alert(inputDateForm.getDate());
</script>

</html>
0
Mike SN53477 Messages postés 26 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 27 août 2005
11 juin 2005 à 20:18
Bonne continuation padam90!
0
Rejoignez-nous