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

Langage PHP Discussion :

Messagerie et décalage horaire


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Messagerie et décalage horaire
    Bonjour à tous,

    J'ai un petit soucis qui ne me semble pas sorcier mais je ne sais pas trop comment m'y prendre correctement.

    J'ai créer une messagerie sur laquelle la date et l'heure d'envoi des messages s'inscrit.

    Lorsque j'insère un message en BDD j'utilise (L'heure stockée est donc l'heure du serveur sur lequel est hébergé mon site (en France), je ne me trompe pas ?).

    Je la stocke en BDD dans un datetime de la forme :
    2011-01-18 18:06:12
    Le problème intervient lorsque je récupère la date en PHP. En effet mon code marche pour la France mais un Américain par exemple verra l'heure française d'envoi du message... Auriez-vous donc une idée de la façon dont je pourrais adapter le code ci-dessous pour que mes visiteurs voient l'heure dans le fuseau horaire de leur pays ?

    J'ai l'impression qu'il faut regarder du coté de l'attribut Z de date ou de date-default-timezone-set mais je ne sais pas trop comment bien m'y prendre.

    Merci d'avance pour votre aide !

    Mon code :

    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
     
    	$datetime = Retour de ma requete SQL (retourne le datetime)
    	$jour = substr($datetime, 8, 2);
        $mois = substr($datetime, 5, 2);
        $annee = substr($datetime, 0, 4);
        $heure = substr($datetime, 11, 2);
        $minute = substr($datetime, 14, 2);
        $seconde = substr($datetime, 17, 2);
     
    	if ((date ('d')==$jour) && (date ('m')==$mois) && (date ('Y')==$annee))
    	{
    		if (LANGUE_INTERFACE == "en")
    		{
    			if ((int)$heure == 0)
    				return "12:".$minute." "."am";
    			if ((int)$heure == 12)
    				return "12:".$minute." "."pm";
    			else
    				return ($heure%12).":".$minute." ".(($heure<12)?"am":"pm");
    		}
    		else
    			return $heure.":".$minute;
    	}

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu connais le fuseau horaire de l'utilisateur ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Non... Et je ne vois pas trop comment faire justement vu que le PHP est coté serveur.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Soit tu demandes a l'utilisateur de définir son fuseau horaire comme ici sur le forum, soit tu passes par du javascript.

  5. #5
    Membre averti Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Points : 329
    Points
    329
    Par défaut
    http://www.w3schools.com/jsref/jsref_obj_date.asp

    Effectivement avec le Javascript, à l'envoi de ton formulaire, tu fais, au lieu d'un submit, directement un appel de fonction qui va récupérer la date/heure du navigateur que tu inséreras dans un input hidden, puis un submit de ton formulaire.
    Et hop le tour et joué. Non ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Ok merci pour vos précisions...

    En fait il n'y a pas forcément de submit juste avant. Supposons qu'un membre américain aille voir sa messagerie aujourd'hui il visualisera des messages envoyés par ses amis français à l'heure française.

    Donc il faudrait que j'ajoute au chargement de cette page une fonction JS qui convertissent l'heure dans l'heure de son fuseau ?

    En faisant quelque chose du type (heure francaise) - Le décalage avec l'heure l'GMT + le décalage horaire de son fuseau ?

    Le fuseau horaire de son navigateur vous semble t-elle fiable ?

    Je vous avoue que j'ai un peu du mal à imaginer à quoi ressemblerait concrètement le script...

    Merci beaucoup pour votre aide en tout cas !

  7. #7
    Développeuse forum
    Avatar de Atomya Rise
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Février 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 443
    Points : 1 420
    Points
    1 420
    Par défaut
    Je pense plutôt que l'idée de sabotage était pas mal.

    Lors de l'inscription d'un de tes utilisateurs, tu ajoutes un select sur son timezone. Celui-ci choisira son timezone que tu insèrera dans son profil.
    Et ensuite, lors des tes affichages heures, tu affiches l'heure selon son timezone renseigné...

    Simplement en php, je ne pense pas qu'il y ai réellement besoin de js pour ça...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses.

    Cependant on essaie d'optimiser les taux de transformations et du coup on souhaiterait minimiser le nombre de champ à l'inscription...

    La gestion du décalage horaire en JS vous semble pas fiable ? Ou compliqué à mettre en oeuvre ?

    Merci d'avance pour vos réponses !

  9. #9
    Développeuse forum
    Avatar de Atomya Rise
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Février 2009
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 443
    Points : 1 420
    Points
    1 420
    Par défaut
    La gestion du décalage horaire avec JS est fiable, puisque celui-ci va aller récupérer l'heure du système de l'utilisateur.

    Difficile à mettre en oeuvre -> non pas du tout !

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    new Date().getTimezoneOffset()

  10. #10
    Membre confirmé
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    373
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 373
    Points : 514
    Points
    514
    Par défaut
    en fait, la gestion du fuseau horaire de l'utilisateur est la plus censée.
    vu que les messages sont tous stockées dans ton serveur, à l'heure serveur et distribués par le php, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    setlocale(LC_TIME, "fr");
    $date = new DateTime("now");
    $tz=new DateTimeZone("Europe/Paris");
    $date->setTimezone($tz);
    $datefinale=$date->format("Y-m-d H:i:s");
    adapté au fuseau horaire de ton correspondant devrait suffire. et il aura la date et l'heure adapté à son fuseau.
    il faut par contre stocker pour chaque utilisateur son fuseau horaire.
    ca evite les manips en javascript selon l'heure affiché et tout ca,

    un probleme compliqué se résoud mieux en le traitant simplement.

Discussions similaires

  1. [Dates] Date() et décalage horaire ?
    Par Kenshin86 dans le forum Langage
    Réponses: 10
    Dernier message: 17/04/2007, 19h07
  2. t:inputCalendar et décalage horaire?
    Par toutoune60 dans le forum JSF
    Réponses: 3
    Dernier message: 21/02/2007, 19h32
  3. [Proc Stoc] Décalage horaire
    Par elsuket dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/02/2007, 15h57
  4. Date et décalage horaire
    Par rlnd23 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 06/10/2006, 15h18
  5. Décalage horaire par rapport à l'heure GMT
    Par Pasqualini dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/07/2006, 09h28

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