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 :

Condition "if" et un setInterval


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Condition "if" et un setInterval
    Bonjour,
    Je suis développeur web.
    Je travaille actuellement pour une cliente qui m'a demandé un mode nuit activé automatiquement après une certaine heure.
    Je mode nuit fonctionne parfaitement en mode manuel.
    Le mode automatique fonctionne ainsi :

    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
     
    var now = new Date();
     
    var heure   = ('0'+now.getHours()).slice(-2);
    var minute  = ('0'+now.getMinutes()).slice(-2);
    var setH = //une certaine heure;
    var setM = //une certaine minute;
     
    var handler_dark;
    handler_dark = setInterval(function(){
    if (heure >= setH && minute >= setM){
       ToggleNightMode();
      console.log("activé");
    }
    if(body.classList.contains('dark')){
        clearTimeout(handler_dark);
    }
      console.log("setInter_Check");
    }, 60000);


    Toutes les minutes, on vérifie si l'heure et la minute actuelle est supérieur ou égale à l'heure fixé. Si c'est le cas, ça active le mode nuit.
    Si le body est en mode nuit, ça break le setInterval.
    Mon soucis est que lors de l’exécution, le "if (heure >= setH && minute >= setM)" est sauté. Il n'est jamais exécuté.
    Comment puis-je faire ?

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    Bonjour !

    Tout d'abord, je ne comprends pas pourquoi clear l'interval, si il vient vérifier l'heure.
    Ensuite, il suffirait d'une simple structure comme celle-ci si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        if ( (heure >= hourEndDark && minute >= minuteEndDark) && body.classList.contains("dark"))
            ToggleNightMode();
        if ( (heure >= setH && minute >= setM) && !body.classList.contains("dark"))
            ToggleNightMode();
    Et puis il me semble qu'il faut utiliser clearInterval() sur un interval et clearTimeout() sur un timeout !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide.
    Mais j'ai un autre soucis.

    Imaginons fixer l'heure à 21h.
    Si je suis présent sur le site à 20h58, et que je ne recharge pas la page à 21h, il reste en mode jour.
    Comment puis-je résoudre cela ?

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    Je viens de me rendre compte que ma condition ne marche pas, sachant que l'heure de fin pourrait être inférieure à l'heure du début, il faudrait par exemple utiliser la méthode valueOf() de l'instance de Date !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'ai fixé les heures de début et de fin dans des variables différentes. Normalement ça devrait fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var setH = 21;
    var setM = 00;
    var hourEndDark = 08;
    var minutEndDark = 30;
     
      if ((heure >= setH && minute >= setM) && body.classList.contains("light")){
        toggleDarkLight();
      }
     
      else if ((heure >= hourEndDark && minute >= minutEndDark) && body.classList.contains("dark"))
        toggleDarkLight();

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    Regarde, j'ai modifié mon message, sinon ça ne peux pas marcher.
    Il faut aussi réfléchir au fait du retour à zéro des heures, si l'heure de début est 21h et l'heure de fin et 8h30,
    certes quand il est entre 21h et 0h l'heure actuelle est supérieure à 21, mais entre 0h et 8h30 ça ne l'est plus !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci,
    j'essaierais tout cela cette nuit pour voir si tout fonctionne.

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 149
    Points : 252
    Points
    252
    Par défaut
    Le mieux c'est de faire des tests en déclarant des variables n'utilisant pas vraiment l'heure actuelle

  9. #9
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 749
    Points
    4 749
    Par défaut
    Citation Envoyé par Romain_G Voir le message
    Merci,
    j'essaierais tout cela cette nuit pour voir si tout fonctionne.
    amusant, tu ne peux faire qu'un seul test par jour

    si tu ajoutes une date comme le 29 Février tu ne peux faire ton test que tous les 4 ans !

  10. #10
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125

  11. #11
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 749
    Points
    4 749
    Par défaut
    @ danielhagnoul : Pas pu résister, j'ai mis un commentaire sur ton billet

  12. #12
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    @psychadelic : je n'ai pas pu résister, j'ai répondu à ton commentaire sur mon billet.

Discussions similaires

  1. Condition If multiple
    Par M1000 dans le forum ASP
    Réponses: 2
    Dernier message: 01/03/2004, 13h46
  2. [MYSQL] conditions et requetes
    Par sebos63 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 16h41
  3. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04
  4. Condition et contenu TImage
    Par Detlev_linux dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2003, 01h00
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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