8791 sujets

Développement web côté serveur, CMS

Bonjour à tous.

-Je fais un site ou l'on insère des annonces.
-Il sera possible d'insérer depuis tous les pays du monde.
-Je voudrais que la date d'insertion et la date limite soient celles de l'utlisateur où qu'il se trouve.


Il faut donc insérer les dates dans myqsl et les récupérer pour les afficher à l'utilisateur lorsqu'il retourne voir son annonce.

Jusqu'à présent je travaillais dans Wamp et tout allait bien.

Depuis la mise en ligne pour les essais, je me rends compte que le sujet va poser des problèmes insoupçonnés.

En lisant la doc php, j'ai trouvé localtime(), mais je vois partout sur les forums des gens qui disent "impossible de récupérer l'heure client avec PHP".

J'ai donc écrit un petit script avec localtime() ... et il me donne bien l'heure d'Européenne ( où je me trouve ) bien que mon serveur se trouve au Canada. Puis-je en déduire que je peux récupérer l'heure utilisateurs comme ça ?


Plus généralement quelle est la meilleure tactique à employer ?

Un copain me dit de tout insérer en GMT et d'appliquer la modification à l'affichage, selon la localisation de l'utilisateur ... mais ça me paraît tout aussi compliqué

Quelqu'un a-t-il une expérience en la matière ?

Merci pour votre aide.
Il me semble que la seule solution de récupérer l'heure locale de l'utilisateur est de passer par la fonction getTimezoneOffset() de l'object Date de JavaScript.
var d = new Date()
var n = d.getTimezoneOffset();

a écrit :
The getTimezoneOffset() method returns the time difference between Greenwich Mean Time (GMT) and local time, in minutes.
For example, If your time zone is GMT+2, -120 will be returned.


Tu dois donc pouvoir par exemple créer en JavaScript un cookie qui sera ensuite récupéré en PHP. L'inconvénient c'est que tu ne connaitras pas cette donnée au premier affichage du site.


Une autre solution qui doit fonctionner serait de se baser sur l'adresse IP de l'utilisateur, celle-ci étant localisé géographiquement. Je te laisser chercher sur Google pour savoir comment géolocaliser un IP. Mais ce n'est pas une donnée très fiable dans le cas où par exemple l'utilisateur utilise un proxy ou un VPN.
Bonjour,

Je suis d'accord avec moust.

J'ajoute que la fonction localtime ne te permettra bien évidemment pas de résoudre ton problème.

À mon avis, le mieux est de demander à l'utilisateur de donner son fuseau horaire dans son profil ; s'il ne l'a pas donné, tu peux te rabattre sur les autres solutions, mais aucune ne sera parfaitement fiable.
Modérateur
Et l'eau,

@Moust : +1 mais :
Il faut toujours partir du principe que le JS ne soit pas activé pour que l'application web fonctionne. Mon idée est plus longue à mettre en place et devrait fonctionner aussi.

Ce serait un truc du style :

- récupérer l'ip du client (@julien Royer : je sais c'est pas super fiable)
- connaître sa localisation : http://ipinfodb.com/ip_location_api.php
- récupérer la date et l'heure du serveur
- calcul suivant les fuseaux horaire
niuxe a écrit :
@Moust : +1 mais :
Il faut toujours partir du principe que le JS ne soit pas activé pour que l'application web fonctionne. Mon idée est plus longue à mettre en place et devrait fonctionner aussi.

Rien n'empêche d'utiliser plusieurs solutions :
- Si l'utilisateur a renseigné le fuseau horaire dans son profil, utiliser cette information.
- Si JS est disponible, utiliser getTimezoneOffset ou navigator.geolocation (HTML5).
- Si aucune des solutions précédentes n'est disponible, se baser sur l'IP de l'utilisateur.
Modifié par Julien Royer (31 May 2012 - 09:51)
@tous

Merci pour vos commentaires, l'échange de points de vue est très intéressant.

Je pense que je reprendrai plus tard la problématique "heure client" dans un prochain site.

Je suis limite au niveau du temps et, vu le nombre de docs à lire, je pense que je vais me limiter à forcer une time zone par défaut avec :

date_default_timezone_set("PPPPPP/VVVVVVV")


reprenant Pays/Ville de référence où la plus grande partie des annonces seront placées, et le signifier aux utilisateurs.

... Du moins si personne ne me dit que c'est une très mauvaise idée. Smiley smile
Tropiques a écrit :
Je suis limite au niveau du temps et, vu le nombre de docs à lire, je pense que je vais me limiter à forcer une time zone par défaut avec :

date_default_timezone_set("PPPPPP/VVVVVVV")


reprenant Pays/Ville de référence où la plus grande partie des annonces seront placées, et le signifier aux utilisateurs.

... Du moins si personne ne me dit que c'est une très mauvaise idée. Smiley smile

Ce n'est pas une mauvaise idée ; le plus important dans tout cela est effectivement de bien informer tes utilisateurs du fuseau horaire utilisé.