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 :

Convertir une date depuis timestamp d'un GeoJson


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut Convertir une date depuis timestamp d'un GeoJson
    Bonjour à tous,

    Je suis grand débutant en JS, et dans le cadre d'une carte interactive Leaflet (http://leafletjs.com/), j'arrive bien à afficher un fichier GeoJson (pour moi c'est déjà énorme ).
    Ce GeoJson contient différentes properties (je n'ai pas la main sur sa création, donc je "fais avec" dans mon appli), notamment "name", "type", ...
    J'arrive bien à afficher ces properties dans une infobulle avec ce genre d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    layer.bindPopup('name : ' + feature.properties.name  + '<br>type : ' + feature.properties.type);
    Comme certains champs contiennent des caractères spéciaux, notamment le "@" (exemple : "@user"), on m'a utilement conseillé d'écrire de la sorte : feature.properties['@user']

    Je souhaiterais maintenant afficher la propriété date dans l'infobulle (feature.properties['@timestamp']), mais si possible au format DD/MM/YYYY. Cette date est formatée de la sorte : AAAA-MM-DDTHH:MM:SSZ (exemple : 2015-09-22T14:38:50Z)
    Je dois donc (je suppose) écrire une fonction basée sur la fonction substring()
    Mais je n'y parviens pas, et je me demande si ça ne viendrait pas du caractère spécial dans @timestamp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var datesrc = feature.properties['@timestamp'];
    var dateok = datesrc.substring(9, 2) + '/' + datesrc.substring(6, 2) + '/' + datesrc.substring(1, 4) ;
    Mais ça ne marche pas...

    Que pouvez-vous me conseiller pour cette conversion ?

    Merci à vous.

    Sylvain M.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    tu n'utilise pas correctement la méthode substring, substring( deb, fin), les index commençant à 0.

    Pour récupérer le 09 il te faut faire chaine.substring(5, 7).

    Nota : le fin est non compris.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Merci ! Je pensais que c'était comme la fonction mid() en vba ou la formule stxt() dans excel : position de départ+ nb de caractères.
    Je vais corriger ça demain ! Merci !

    Sylvain M.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    re !
    Je viens de trouver le temps de mettre à jour mon code.
    J'ai malgré tout encore un message d'erreur.
    Voila ce que j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          var datesrc = '';
          datesrc = feature.properties['@timestamp'];
          var dateok = '';
          dateok = datesrc.substring(8, 10) + '/' + datesrc.substring(5, 7) + '/' + datesrc.substring(0, 3) ;
    Et quand je regarde la console de déboguage de FireFox, j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TypeError: datesrc is undefined
    dateok = datesrc.substring(8, 10) + '/' + datesrc.substring(5, 7) + '/' + datesr...
    Ce doit être une erreur grossière de débutant, mais personnellement je ne la vois pas...
    Vous la voyez vous ?

    Sylvain M.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Peut être qu'au moment où tu fais datesrc = feature.properties['@timestamp'], feature.properties['@timestamp'] n'est pas définie, c'est à vérifier.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    C'est bien ça !
    Je m'en suis sorti en posant une condition avant la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            var datesrc = '';
            if (feature.properties['@timestamp'] == undefined) {datesrc = 'NoDate';} else {datesrc = feature.properties['@timestamp'] ;};
    Ça me paraissait impossible car chaque feature a bien une date dans le GeoJson.
    Mais en fait, si je comprends bien (?), au moment ou je définie la variable datesrc, je n'ai pas encore ouvert le GeoJson donc c'est pour ça que ça coinçait !?
    Voici le code un peu plus détaillé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    onEachFeature: function (feature, layer) {
          var popupname = '';
          if (feature.properties.name == undefined) {popupname = 'Pas de nom';} else {popupname = feature.properties.name ;};
          var datesrc = '';
          if (feature.properties['@timestamp'] == undefined) {datesrc = 'NoDate';} else {datesrc = feature.properties['@timestamp'] ;};
          var dateok = '';
          dateok = datesrc.substring(8, 10) + '/' + datesrc.substring(5, 7) + '/' + datesrc.substring(0, 4) + ' ' + datesrc.substring(11, 16) ;
          layer.bindPopup('<b>' + popupname + '</b><br>Date : ' + dateok);		
    			}
    Si tu as une explication plus "précise" que mes suppositions, je suis quand même preneur !

    Merci beaucoup !

    Sylvain

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

Discussions similaires

  1. Convertir une date en timestamp
    Par kevinf dans le forum Langage
    Réponses: 3
    Dernier message: 13/04/2015, 18h48
  2. [MySQL] Convertir une date timestamp provenant d'une colonne
    Par WPH2009 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/10/2009, 07h48
  3. [Dates] Convertir une date UTC en timestamp
    Par Sephiroth Lune dans le forum Langage
    Réponses: 2
    Dernier message: 04/09/2009, 22h39
  4. [MySQL] Convertir une date mysql en timestamp
    Par NioX5199 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/12/2007, 17h47
  5. Réponses: 14
    Dernier message: 29/06/2005, 10h22

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