IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Un bug incroyable!


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Un bug incroyable!
    Hello, je me suis lancé sur un script pour afficher l'heure du Serveur avec Javascript (pas celle du client).

    J'ai lancé mon script aujourd'hui enfin terminé après dur labeur, et je me suis retrouvé face à la plus monstrueuse abberation à laquelle j'aie jamais dû faire face.

    Je vous présente mon code ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    var now = "<?=$dateSyntax['annee']?>, <?=$dateSyntax['mois']?>, <?=$dateSyntax['jour']?>, <?=$dateSyntax['heure']?>, <?=$dateSyntax['minutes']?>, <?=$dateSyntax['secondes']?>";
     
    function initDate()
    {
    date = new Date();
    date.setHours(<?=$date('h')?>);
    date.setMinutes(<?=$date('i')?>);
    date.setSeconds(<?=$date('s')?>);
    date.setDate(<?=$date('d')?>);
    date.setMonth(<?=$date('m')?>);
    date.setFullYear(<?=$date('Y')?>);
    }
    initDate();
     
    function myDate()
    {
    date = new Date(date);
     
    var noms_mois = new Array('Décembre', 'Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre');
     
    var texte = ''; // On crée le texte qui va être affiché
    texte += 'Il est '+date.getHours()+'H'+date.getMinutes()+' et '+date.getSeconds()+' secondes.<br/>';
    texte += 'Nous sommes le '+date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear()+'.<br/>';
    texte += 'Vous êtes donc le '+date.getDate()+' '+noms_mois[date.getMonth()]+' '+date.getFullYear()+'.';
     
    document.getElementById('introdate').innerHTML = 'Bonjour <b>Homie</b>, la date serveur est: '+now+'';
    document.getElementById('date').innerHTML = texte;
     
    date.setTime(date.getTime() + 1000);
    }
    setInterval(myDate,999);
    Tout se passe bien, content, mis à part le fait que cet abruti me donne la date suivante:
    Nous sommes le 1/11/2007.
    Vous êtes donc le 1 Novembre 2007.
    Intrigué, j'ai pensé que le serveur déconnait: ben non la date serveur est bien le 31. J'ai alors ajouté un petit -1 à coté de mon date('d') et pensez-vous qu'il a affiché docilement 31? non il a affiché 30! Je me suis dit "est-il trop con pour comprendre qu'octobre possède 31 jours?" j'ai remplacé -1 par +1 et... Il me dit quand même 1 Novembre.

    Un vrai pétage de plombs! Javascript a décidé de ne pas afficher 31. Comment l'empêcher de commettre ce grave délit de discrimination?

  2. #2
    Membre régulier Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Points : 103
    Points
    103
    Par défaut
    On a eu exactement le même bug hier (mais pour le 1er Février)

    Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    date = new Date();
    date.setHours(<?=$date('h')?>);
    date.setMinutes(<?=$date('i')?>);
    date.setSeconds(<?=$date('s')?>);
    date.setMonth(<?=$date('m')?>);
    date.setDate(<?=$date('d')?>);
    date.setFullYear(<?=$date('Y')?>);
    (j'ai juste déplace le Month)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    waow! belle progression: nous somme le 31 Novembre 2007.
    Reste juste à lui faire dire "Octobre"! Y'aurait-t-il encore un meilleur arrangement pour le format? ^^

    ARG il fait pareil!

  4. #4
    Membre régulier Avatar de arkandias
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 102
    Points : 103
    Points
    103
    Par défaut
    Oui...

    Il se trouve que Javascript gradue les mois de 0 à 11...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function initDate()
    {
    date = new Date();
    date.setHours(<?=$date('h')?>);
    date.setMinutes(<?=$date('i')?>);
    date.setSeconds(<?=$date('s')?>);
    date.setMonth(<?=$date('m')?>);
    date.setDate(<?=$date('d')?>);
    date.setFullYear(<?=$date('Y')?>);
    }
    initDate();
     
    function myDate()
    {
    date = new Date(date);
     
    var noms_mois = new Array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
     
    var mois = date.getMonth()+1;
     
    var texte = ''; // On crée le texte qui va être affiché
    texte += 'Il est '+date.getHours()+'H'+date.getMinutes()+' et '+date.getSeconds()+' secondes.<br/>';
    texte += 'Nous sommes le '+date.getDate()+'/'+mois+'/'+date.getFullYear()+'.<br/>';
    texte += 'Vous êtes donc le '+date.getDate()+' '+noms_mois[date.getMonth() + 1]+' '+date.getFullYear()+'.';
     
    document.getElementById('introdate').innerHTML = 'Bonjour <b>Homie</b>, la date serveur est: '+now+'';
    document.getElementById('date').innerHTML = texte;
     
    date.setTime(date.getTime() + 1000);
    }
    setInterval(myDate,999);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chaines de caracteres - Bug incroyable
    Par ValyGator dans le forum C++
    Réponses: 9
    Dernier message: 29/10/2009, 00h21
  2. Incroyable bug ou erreur débile ?
    Par Magemax dans le forum C#
    Réponses: 4
    Dernier message: 18/04/2008, 22h44
  3. Bug incroyable de g++ ?
    Par KindPlayer dans le forum C++
    Réponses: 11
    Dernier message: 18/10/2007, 17h41
  4. [MySQL] Incroyable ce bug
    Par franfr57 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/04/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo