Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/06/2011, 13h14   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 2
Points : 2
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 :
Citation:
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 :
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;
	}
milman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 14h42   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Est-ce que tu connais le fuseau horaire de l'utilisateur ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 14h48   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 2
Points : 2
Non... Et je ne vois pas trop comment faire justement vu que le PHP est coté serveur.
milman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 15h04   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Soit tu demandes a l'utilisateur de définir son fuseau horaire comme ici sur le forum, soit tu passes par du javascript.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 16h53   #5
Membre confirmé
 
Avatar de Pymento
 
Homme
Ingé. Info.
Inscription : janvier 2008
Messages : 338
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingé. Info.

Informations forums :
Inscription : janvier 2008
Messages : 338
Points : 273
Points : 273
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 ?
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS
Pymento est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 19h00   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 2
Points : 2
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 !
milman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 11h50   #7
Membre Expert
 
Avatar de Atomya Rise
 
Femme Emilie Lefol
En recherche d'emploi
Inscription : février 2009
Messages : 411
Détails du profil
Informations personnelles :
Nom : Femme Emilie Lefol
Âge : 26
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : En recherche d'emploi
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2009
Messages : 411
Points : 1 277
Points : 1 277
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...
__________________

Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
Pas de question technique en privé
- Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
- Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)
Atomya Rise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 13h07   #8
Invité de passage
 
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 2
Points : 2
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 !
milman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 19h56   #9
Membre Expert
 
Avatar de Atomya Rise
 
Femme Emilie Lefol
En recherche d'emploi
Inscription : février 2009
Messages : 411
Détails du profil
Informations personnelles :
Nom : Femme Emilie Lefol
Âge : 26
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : En recherche d'emploi
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2009
Messages : 411
Points : 1 277
Points : 1 277
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 :
new Date().getTimezoneOffset()
__________________

Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
Pas de question technique en privé
- Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
- Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)
Atomya Rise est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/06/2011, 05h01   #10
Membre actif
 
christian
Développeur indépendant
Inscription : août 2004
Messages : 251
Détails du profil
Informations personnelles :
Nom : christian
Âge : 43
Localisation : France

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

Informations forums :
Inscription : août 2004
Messages : 251
Points : 184
Points : 184
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 :
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.
eomer212 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h01.


 
 
 
 
Partenaires

Hébergement Web