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 :

Soucis avec Date (et getTime)


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut Soucis avec Date (et getTime)
    On a un soucis dans un calcul de différence de date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var start=(new Date()).getTime();
     
    ...
     
    var duration=(new Date()).getTime() - start;
    Le code précédant calcule la durée de chargement/initialisation d'une page et de ces composants coté client (flash, etc). Tout va bien dans 99,9% des cas, mais on obtient des résultats abérrants dans les rares cas restants, genre une durée de plusieures heures, voire même des jours (on n'a jamais de valeurs négatives, c'est déjà ça). On essaye de comprendre pourquoi.
    Il y a 2 choses à vérifier lors d'un calcul de différence de date: tenir compte du fait que les mois vont de 0 à 11 (et non pas de 1 à 12), et du jour de changement d'heure en automne et printemps (daylight savings).
    Or ici on regarde simplement la date système du client et nous sommes en août (je ne crois pas qu'il y ait de changement d'heure en juiller/aoùut quelque part dans le monde).

    Merci pour vos lumières.

  2. #2
    Membre averti Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 339
    Points
    339
    Par défaut
    var start=(new Date()).getTime();

    ...

    var duration=(new Date()).getTime() - start;
    Hello (new Date()).getTime() var récupérer le nb de millisecondes depuis le 01/01/1970, donc ce ne doit pas être un pb de changement d'heure; Tu as identifié les cas où le pb se pose ?

    est-ce que tu n'aurais pas - autre part dans le code - un morceau de code qui change ta variable "start" dans des cas précis ?

    vas aussi voir ici, ton problème est peut-etre lié à ce topic...

    bye
    Nico

  3. #3
    Membre averti Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Points : 332
    Points
    332
    Par défaut
    Bonjour, voici un code trouvé sur internet :

    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
     
    <SCRIPT LANGUAGE="JavaScript">
    /*
    CODE A PLACER JUSTE APRES LA BALISE HEAD
    */
    NavName = navigator.appName.substring(0,3);
    NavVersion = navigator.appVersion.substring(0,1);
    if (NavName != "Mic" || NavVersion>=4)
        {
        entree = new Date;
        entree = entree.getTime();
        }
    function ZsortIe()
        {
        if (NavName != "Mic" || NavVersion>=4)
            {
            fin = new Date;
            fin = fin.getTime();
            secondes = (fin-entree)/1000;
            alert('Page chargée en ' + secondes + ' seconde(s).');
            }
        }
    window.onload = ZsortIe;
    </SCRIPT>

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par Nicopilami Voir le message
    Hello (new Date()).getTime() var récupérer le nb de millisecondes depuis le 01/01/1970, donc ce ne doit pas être un pb de changement d'heure; Tu as identifié les cas où le pb se pose ?
    C'est justement ce qu'on cherche. Raison pour laquelle je demande vos avis, expériences, suggestions, etc.
    Un bug dans Date().getTime() ou dans le calcul de différence semble cependant exclu, ça se saurait depuis longtemps.

    Citation Envoyé par Nicopilami Voir le message
    est-ce que tu n'aurais pas - autre part dans le code - un morceau de code qui change ta variable "start" dans des cas précis ?
    On y a pensé. On a déjà trituré le code dans tous les sens, mais on revérifiera une Nème fois.

    Citation Envoyé par Nicopilami Voir le message
    vas aussi voir ici, ton problème est peut-etre lié à ce topic...
    bye
    Nico
    Non, rien à voir à priori. Tout le monde sait bien que le 31 juin c'est le 1er juillet

    Dans le code on fait juste des new Date() du coté client, il n'y a pas d'assignation explicite de la date par valeur, donc pas de risque d'avoir mis 1 pour janvier au lieu de 0 par exemple.
    Par contre, il se peut que Date() renvoie des valeurs farfelues si l'horloge du PC client débloque, mais ça me parait peu problable.

    Pour situer le contexte, on logge les temps de chargement coté client depuis 5 semaines environ et on a près d'1 million de hits jusqu'à ce jour. Quelques centaines ont un temps d'au moins un jour, plusieurs milliers d'au moins 2 heures (je vois mal des browsers clients attendre si longtemps leur page). Les 99% hits restants sont en dessous de 20 secondes (ouf, c'est déjà ça de "normal").

    Merci en tous cas pour ces réponses, vos autres idées sont bienvenues

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ca pourrait pas venir des robots ou autres joyeusetés par hasard ?

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    On y a aussi pensé. Mais dans le log on a le user-agent, et les durées anormalement élevées arrivent avec tous les browsers usuels: IE, Mozilla/Firefox, Chrome, Opera, Safari.
    Par ailleurs, l'application pour laquelle on logge ces durées demande que les utilisateurs soient enregistrés et identifiés, difficile pour un robot.

    J'ajoute que l'application utilise Flash. Y aurait-il des "perturbations" entre les différents plug-in qui gêneraient l'interpréteur javascript du browser ?

    Des problèmes de cache aussi ? Par exemple, la variable "start=new Date()" serait reprise d'un cache alors que "duration=new Date()-start" serait recalculée ?

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Pour être franc, je ne vois pas spécialement d'où peut venir l'anomalie, ceci dit, ton histoire de cache est intéressante, du coup, juste une supposition : ta notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var start=(new Date()).getTime();
    implique selon moi une évaluation de trop qui peut contribuer à rendre les résultats incohérents pour des délais très courts, du coup, essaye peut être juste avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var start=new Date().getTime();
    sait-on jamais

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    J'ai suggéré d'être encore plus explicite et de bien découper le code, comme ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var currentDate=new Date();
    var start=currentDate.getTime();
    Toujours dans la reflexion du comment du pourquoi qu'on n'a pas encore trouvé, aussi invraisemblable qu'elles puissent être les valeurs obtenues ne sont pas complètement débiles. Il n'y a pas de durées négatives, ni de durée en mois, années, décénies, etc. La plus longue durée est de 20 jours, ça reste dans le domaine du "tolérable".

Discussions similaires

  1. Petit souci avec dates
    Par santacrus dans le forum VBA Access
    Réponses: 9
    Dernier message: 11/10/2009, 08h06
  2. Un petit souci avec les dates
    Par Ben-o dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 27/09/2007, 18h42
  3. [Dates] souci avec les dates
    Par Ludo75 dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2006, 17h15
  4. souci avec une comparaison de date
    Par Ludo75 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/02/2006, 15h59
  5. soucis avec getTime
    Par cels dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2006, 11h13

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