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

NodeJS Discussion :

Actualiser l'heure avec Moment / Node, setInterval


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut Actualiser l'heure avec Moment / Node, setInterval
    Bonjour,

    J'ai un soucis tout bête... J'utilise Moment pour afficher la date et l'heure. Ca fonctionne, et j'ai tout ça dans le bon format.
    Par contre, je n'arrive pas à actualiser l'heure sur ma page, mais ça fonctionne dans la console.

    Voilà mon code :

    Fichiers /models/heure.js :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    var moment = require('moment');
    var http = require("http");
     
    moment.locale('fr', {
        months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
        monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
        weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
        weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
        weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
        longDateFormat : {
            LT : "HH:mm",
            LTS : "HH:mm:ss",
            L : "DD/MM/YYYY",
            LL : "D MMMM YYYY",
            LLL : "D MMMM YYYY LT",
            LLLL : "dddd D MMMM YYYY LT"
        },
     
     
        ordinalParse : /\d{1,2}(er|ème)/,
        ordinal : function (number) {
            return number + (number === 1 ? 'er' : 'ème');
        },
        meridiemParse: /PD|MD/,
        isPM: function (input) {
            return input.charAt(0) === 'M';
        },
     
        meridiem : function (hours, minutes, isLower) {
            return hours < 12 ? 'PD' : 'MD';
        },
        week : {
            dow : 1, // Monday is the first day of the week.
            doy : 4  // The week that contains Jan 4th is the first week of the year.
        }
    });
     
     
    var maj = setInterval(function () {temps()}, 1000);
     
    function temps() {
     
    var now = moment(new Date());
    var date = now.format("dddd, D MMMM YYYY, HH:mm:ss");
     
    console.log(date);
     
    module.exports.date = date;
    }

    Fichier /server/controllers/index.js :

    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
     
    var date = require('./../models/heure.js');
     
    module.exports.index = function (req, res, next) {
      res.send('Hello World');
    };
     
    module.exports.test = function (req, res, next) {
        res.render('test.ejs', {title: 'Page de test'});
    };
     
    module.exports.essai = function (req, res, next) {
        res.render('essai.ejs', {
            title: 'c est un essai',
    	date: date.date
            }
        );
    };

    Et /views/essai.ejs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Date :
    <div>
    <%= date %>
    </div>
    Ca doit être tout bête je suppose, mais je ne trouve pas...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Plusieurs problèmes dans ton code.

    Ca doit être tout bête je suppose, mais je ne trouve pas...
    Oui, c'est tout bête, cela ne marche pas comme ça

    je me ré-auto-cite (et sans exaspération, car je conçois que ce ne soit pas évident) et j'ajoute le gras.

    Site web ->
    La page est construite dynamiquement coté serveur, qui renvoi le résultat sous forme de HTML au navigateur pour chaque url et à chaque chargement de page.
    sans rechargement de page, le client n'est pas informé des modifications éventuelles sur le serveur.
    Faire ici un setInterval (une boucle infini) n'a pas de sens, car ta fonction ne sera de toute façon exécuté qu'à l'appel du client, càd lorsque l'utilisateur chargera ou rechargera la page sur son navigateur, tu ne peux donc que lui renvoyer l'heure du serveur à l'instant t de la demande.

    La bonne façon de faire est d’exécuter une bonne fonction js classique coté client (rien à voir, donc, avec node.js et son cas d'utilisation)

    Ensuite, bien que cela n'ait rien à voir avec le sujet, pour l'utilisation de la fonction d'export, je te renvoi à cette article exports vs module.exports

    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
    module.exports.date = date;
    // devrais être
    module.exports = date;
     
    // ainsi au lieu de l'utiliser comme ceci:
     
    res.render('essai.ejs', {
            title: 'c est un essai',
            date: date.date
            }
        );
     
    // tu peux faire:
     
    res.render('essai.ejs', {
            title: 'c est un essai',
            date: date
            }
        );
    et dans ton index.js:

    module.exports.index mais exports.index
    module.exports.test mais exports.test
    module.exports.essai mais exports.essai

    Concernant l'utilisation de moment.js:

    un simple moment.locale('fr') suffit car tout le reste ne sont que les valeurs par défaut

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var now = moment(new Date());
    peut s'écrire
    voir ici http://momentjs.com/docs/#/parsing/now/

    Enfin, et ce n'est qu'un détail, mais le dossier models, par convention, fait référence au modèle de données, en (trés) gros l'interface avec ta base de données, ce qui n'est pas le cas ici de heure.js.

  3. #3
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Désolé... Je patauge un peu des fois...
    Et j'ai du mal entre export et module.export.

    J'ai bien compris que c'est du web, et que la page ne va pas s'actualiser toute seule, c'est pour cela que je pensais que setinterval fonctionnerait. Mais en fait, non, et c'est normal.

    Finalement, j'ai juste un js sur ma page, qui affiche la date et actualise l'heure, sans Moment.js

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Pour info, sache que tu peux utiliser Moment.js coté client: http://momentjs.com/docs/#/use-it/browser/

  5. #5
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Ok, je ne savais pas.
    Mais en même temps, ce serait pas "utiliser un bazooka pour tuer une mouche" comme on m'a déjà dit ? Le plus simple je pense c'est le script simple de date.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 154
    Par défaut
    Dans ce cas précis, effectivement, mais il est rare aujourd'hui de juste afficher la date et l'heure dans un site web. Par contre si tu fais une webapp où tu manipule beaucoup les dates, cela est utile. La possibilité est juste à garder en tête.

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

Discussions similaires

  1. Insérer la date et l'heure du moment
    Par Furlaz dans le forum C++Builder
    Réponses: 10
    Dernier message: 05/06/2006, 14h32
  2. heure avec centieme de seconde dans un etat
    Par petitours dans le forum Access
    Réponses: 17
    Dernier message: 28/01/2006, 21h05
  3. Insertion d'heure avec sql server
    Par 24 faubourg dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/12/2005, 17h55
  4. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 22h42
  5. Réponses: 3
    Dernier message: 13/08/2004, 18h52

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