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

ASP.NET Discussion :

javascript dans le itemdatabound d'un datalist


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut javascript dans le itemdatabound d'un datalist
    Bonjour,
    Je recupère en base de donnée un datalist qui est en fait une liste de messages ayant chacun une date UTC (c'est à dire heure GMT).
    Je voudrais pour chacun des message que cette date s'affiche selon l'heure locale du client.
    Ma fonction javascript de conversion "date UTC" -> "date locale" est très simple et fonctionne bien, mais je ne sais pas comment la lancer au chargement de la page pour chacun des éléments du datalist... J'imagine qu'il faut gérer ça dans le itemdatabound mais je ne suis pas très sûr...
    Quelqu'un aurait-il une idée ?
    Merci !

  2. #2
    Membre éprouvé Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Par défaut
    si j'ai bien compris je crois que tu devrais plutôt voir comment changer la culture du thread en cours à la culture du client et ainsi l'heure sera formatée directement avec la culture du client

  3. #3
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Citation Envoyé par Mourad
    si j'ai bien compris je crois que tu devrais plutôt voir comment changer la culture du thread en cours à la culture du client et ainsi l'heure sera formatée directement avec la culture du client
    Je crois que tu n'as pas bien compris : ça n'est pas un problème de formatage, mais un problème de fuseaux horaires.
    Je ne pense pas que la culture du thread gère le décalage horaire.

  4. #4
    Membre éprouvé Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Par défaut
    je comprends mieux mnt.
    j'ai pas la solution mais je crois qu'il faut manipuler les classes de dates et culture pour gérer ça y'a même une classe TimeZoneInformation faut voir de ce coté je pense
    désolé si je peux pas t'aider plus

  5. #5
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Pour plus d'éclaircissement, voici ce que j'ai compris concernant la conversion "date UTC" -> "date locale du client" (pour info, "date UTC" ça veut dire que l'heure est en GMT) :

    Côté serveur : le problème n'est pas tellement de convertir une date d'un fuseau horaire vers un autre, mais plutôt de récupérer le fuseau horaire du client.
    Côté client : en javascript, c'est facile, mais mon problème est alors de lancer la fonction javascript pour chacun des éléments du DataList au chargement de la page, pour que la date s'affiche directement en "date locale du client".

    C'est donc sur ce problème que j'ai besoin d'aide !
    Merci !

  6. #6
    Membre éprouvé Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Par défaut
    re
    en ayant ta fonction javascript qui te permet de récupérer le fuseau horaire du client cette fonction elle peut par exemple écrire les données dans un champ hidden depuis lequel tu récupères ce fuseau et dans le event databound tu manipules les dates en conséquences pour l'affichage

  7. #7
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Ma fonction javascript ne me permet pas de récupérer le fuseau horaire (à ma connaissance, une telle fonction n'est pas simple du tout), elle
    permet juste de transformer une "date UTC" en "date locale du client". Si je récupère le offset du client par rapport à l'heure UTC, je vais avoir des
    problèmes entre les heures d'été et les heures d'hiver...

    Donc je reste sur ma position et mon problème est toujours le même :

    Comment lancer la fonction javascript pour chacun des éléments du DataList au chargement de la page ? Ca doit bien être possible, non ?

    Mourad,
    Merci quand même de t'intéresser à mon problème : il n'attire pas les foules !

  8. #8
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    salut,
    as-tu pensais à travailler en asynchrone ? avec Ajax, ça pourrait t'aider à résoudre ton problème.
    sinon pour que l'appel à cette méthode fonctionne il faut qu'elle soit déclenchée par un événement, je pensais à l'évenement load de la page (en javascript)
    par exemple dans le body :
    <body onload="ChangeUTC(date);">
    ....
    </body>
    seulement je ne sais plus si le onload se charge au début ou à la fin du chargement de la page entière, mais pour ça tu peux utiliser les fonctions du buffer de ASP pour charger ta page entièrement sur le serveur avant de l'envoyer chez le client.

  9. #9
    Membre éprouvé Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Par défaut
    re
    bon j'ai fait une petite recherche et voilà la fonction javascript qui te permet d'avoir l'offset du poste client
    Date.getTimezoneOffset()
    voici le lien je pense que la réponse à ton problème se trouve là
    http://www.velocityreviews.com/forum...-timezone.html

  10. #10
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Citation Envoyé par Mourad
    re
    bon j'ai fait une petite recherche et voilà la fonction javascript qui te permet d'avoir l'offset du poste client
    Date.getTimezoneOffset()
    voici le lien je pense que la réponse à ton problème se trouve là
    http://www.velocityreviews.com/forum...-timezone.html
    Oui, sauf que si je dois faire la conversion disons du "20/08/2006 15H00" et que je récupère l'offset d'auhourd'hui, et ben je me trompe d'une heure,
    à cause du changement d'heure. C'est ce que je viens d'expliquer. La réponse n'est pas de ce côté-là me semble-t-il...

  11. #11
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    est-ce que tu as regardé dans l'objet Request d'ASP si tu n'avais pas les informations que tu désires? l'objet Request renvoie pas mal d'info sur ton client (adresse IP, culture, ...)

    For Each str As String In Request.ServerVariables.AllKeys
    Response.Write(str & " : " & Request.ServerVariables(str) & "<br />")
    Next

    sinon essaye de voir avec cette méthode, elle sert à insérer du javascript sur la page dans des balises <script>...
    Page.ClientScript.RegisterClientScriptBlock()

  12. #12
    Membre éprouvé Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Par défaut
    re
    bon après avoir réfléchi je pense qu'en matière de gestion il faut se fixer un repère et ce repère dans ce cas c'est la date et heure du serveur car même si on pourra récupérer le fuseau horaire du client etc qui nous dit que ces données sont correctes chez lui?
    donc finallement je pense qu'il faut garder la notion de date et heure avec pour référence la date et l'heure du serveur... et puis par exemple au dessus du grid view on peut présenter un dropdownlist avec les différent fuseaux horaire et en changeant ce paramètre le client se verra mettre à jour les dates et l'heure de son gridview, toutefois ce pb ne règle pas le pb d'heure d'été etc... car en fin de compte même dans la physique on ne peut rien faire si on a pas de repère fixe.

  13. #13
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    car en fin de compte même dans la physique on ne peut rien faire si on a pas de repère fixe.
    D'où la notion d'heure UTC.... Faut pas réinventer la roue....

  14. #14
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    La question n'était pas de savoir si je devais faire des conversions ou pas, mais de savoir comment je pouvais les faire...
    Je stocke bien les heures en UTC dans la base, mais c'est quand même pas très convivial pour l'utilisateur de lui afficher des heures UTC. Et si son ordinateur n'est pas bien paramétré, c'est son problème.
    De plus, dans mon appli, l'utilisateur doit à certains moments renseigner des heures : si je lui demande de faire la conversion UTC, y'a la moitié des utilisateurs qui va rien comprendre...

    ccambier,
    J'avais déjà regardé dans le Request, et je n'avais rien trouvé.
    En ce qui concerne le Page.ClientScript.RegisterClientScriptBlock(), c'est peut-être une bonne idée : je remplit la fonction javascript maFonction() dans le itemDataBound du Datalist de façon à ce qu'elle lance la conversion de date pour chacun des éléments du datalist, et je lance maFonction() sur l'événement onload du body.
    Je teste ce soir ou demain et je reviens vous dire ce que ça donne.
    Merci !

  15. #15
    Membre averti
    Profil pro
    Directeur Technique
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur Technique

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Bon alors finalement, voilà ce que j'ai fait, je ne sais pas si c'est très clean mais ça semble fonctionner :


    Voilà ma fonction javascript :

    function localTime(id, utcDate) { // utcdate est une date UTC au format yyyyMMddHHmmss
    var d = new Date(Date.UTC(utcDate.substring(0, 4), utcDate.substring(4, 6) - 1, utcDate.substring(6, 8), utcDate.substring(8, 10), utcDate.substring(10, 12), utcDate.substring(12, 14)));
    document.getElementById(id).innerHTML = d.toLocaleString();
    }


    Et voilà ce que je fais dans le itemDataBound :

    protected void _dlMessages_ItemDataBound(object sender, DataListItemEventArgs e)
    {
    ...
    Label lblSentdate = (Label)(e.Item.FindControl("_lblSentdate"));
    lblSentdate.Text = "<script language=\"JavaScript\" type=\"text/javascript\">"
    + localTime('" + lblSentdate.ClientID + "', "
    + "'" + ((DateTime)drv.Row["sentdate"]).ToString("yyyyMMddHHmmss") + "');</script>";
    ...
    }


    En tout cas merci pour vos suggestions.
    Si qqun a une remarque sur ma méthode, qu'il n'hésite pas !

  16. #16
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    beh ça m'a l'air clair et c'est une manière que j'ai déjà utilisé dans un développement.
    est-ce normal ou est-ce un erreur, le nom de ta fonction javascript est localTime et dans le code c#tu l'appelles localTimeHisto?

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

Discussions similaires

  1. erreur de syntaxe javascript dans ma page
    Par Oluha dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2005, 14h53
  2. integration varaiables javascript dans du HTML
    Par developpeur_mehdi dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/11/2004, 14h54
  3. Javascript dans un formulaire
    Par MagicManu dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/10/2004, 11h25
  4. Réponses: 2
    Dernier message: 08/08/2003, 17h30
  5. [web] insertion javascript dans du perl
    Par laluna dans le forum Web
    Réponses: 3
    Dernier message: 28/07/2003, 09h50

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