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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    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
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    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
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    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

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    au moment ou je définie la variable datesrc, je n'ai pas encore ouvert le GeoJson...
    je ne comprend pas bien ce que tu essaies de dire !

    Si les propriétés sont déclarées dans tes éléments de "type": "Feature" il n'y a aucune raison que tu ne puisses pas y accéder dans ta boucle onEachFeature.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par NoSmoking
    je ne comprend pas bien ce que tu essaies de dire !
    A vrai dire, moi non plus...
    Bon, à y regarder de plus près dans mes données (plusieurs centaines de Features), j'ai découvert qu'en réalité, il y a bien des Features qui n'ont pas de Timestamp.
    Du coup, le test d'existence est bien nécessaire.

    Désolé pour le dérangement et merci d'avoir essayé de me comprendre !

    A+

    Sylvain M.

+ 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