Détecte automatiquement l'heure locale actuelle de l'utilisateur avec JavaScript ou PHP
J'ai souvent besoin d'afficher des informations basées sur ou influencé par un utilisateur réelleheure locale, qui diffère à travers les fuseaux horaires. Est-il un moyen fiable d'obtenir un courant de l'utilisateur en temps et/ou de fuseau horaire?
Questions Clés:
- Code côté serveur est basé sur l'hôte du site web ou de l'utilisateur FAI
- Code côté Client est basé sur le système de l'utilisateur horloge qui est trop facilement manipulés
Questions clés:
- Est-il nécessaire d'identifier un utilisateur de la géo-localisation?
- Le fournisseur de temps d'être un guide précis?
- Utilisateurs OS horloges peuvent varier ou être modifiées par les utilisateurs?
Exemples:
Compte à rebours:
Seulement 1 heure, 3 minutes, 56 secondes pour aller!
Question: secondes pour passer en fonction sur ce, L'utilisateur de l'OS de l'horloge, les hôtes du serveur de temps (plus ou moins de décalage), ISP system de temps. C'est facile si l'horloge se termine à la même heure pour tous les fuseaux horaires, mais plus délicat si c'est un compte à rebours à quelque chose comme " minuit à l'utilisateur de la zone de l'heure locale)
Édition du journal
Élément affiché à 3:03 (il y a 10 secondes)
Question: "10 secondes" est calculé indépendamment de l'utilisateur, l'heure est ajustée pour correspondre à la zone.
Horaires d'ouverture:
Ce restaurant est ouvert jusqu'à minuit (AEST).
Question: Donner un temps comme le minuit peut être calculée par compensation à partir du serveur-côté, mais à l'aide de psudo fois comme maintenant, dans 2 heures est basé sur le temps de l'utilisateur.
PHP: à l'aide de time()
sorties de l'heure du serveur. Cela peut être compensé en fonction du fuseau horaire de l'utilisateur.
JavaScript: à l'aide de Date()
sorties de l'ordinateur de l'utilisateur le temps de l'horloge qui est trop facilement manipulés.
source d'informationauteur Peter Craig
Vous devez vous connecter pour publier un commentaire.
En bref no.
Je conseille de côté de serveur de temps, et avoir la capacité pour l'utilisateur de choisir son fuseau horaire.
Vous pourriez éventuellement calculer les fuseaux horaires par défaut pour les utilisateurs basés sur des heuristiques autour de leur adresse IP, mais il est ouvert à l'erreur.
Vous devriez être en mesure d'extraire côté client les informations de fuseau horaire à l'aide de javascript /Ajax, mais, comme le temps lui-même ce qui est également ouvert à l'erreur.
Ma recommandation: permettre aux utilisateurs de choisir leur horaire avec un sensible par défaut en fonction de là où vous vous attendez de vos utilisateurs.
Avec JavaScript, il existe un moyen d'obtenir les utilisateurs actuels de décalage horaire.
renvoie le décalage dans les minutes de l'heure GMT. Ne pas stocker cette valeur peut changer en fonction de l'Heure d'été. Si vous en avez besoin sur le serveur (php), alors vous aurez besoin pour capturer en envoyer.
Malheureusement, la spécification HTTP ne pas envoyer les utilisateurs du fuseau horaire, comme en-tête, qui est ce que php aurait besoin.
Je vous suggère d'écrire le serveur de la date de javascript. Puis faire une nouvelle date en javascript pour obtenir la date définie par l'utilisateur sur son ordinateur. Utiliser les différents dans les deux dates.
Avec le serveur de date, vous êtes sûr que votre temps est impartiale.
Tous les calculs doivent être effectués à l'aide du serveur de date.
De l'utilisateur de la différence des fins d'affichage.
Ce serait bien travailler pour éditer les journaux, les comptes à rebours et la sélection des messages comme "de Bon matin".
Si un utilisateur veut de son temps à autre chose... je pense que vous devriez lui laisser avoir.
PHP possède à la fois une Extension PECL et un Paquet PEAR qui peut faire GeoIP recherches. En supposant que l'utilisateur n'est pas derrière un proxy ou un NAT de quelque sorte, la base de données est à jour et exacte, et l'adresse est dans la base de données, vous pouvez obtenir le fuseau horaireet de calculer le décalage de l'heure du serveur.
Ou, vous pouvez simplement accepter que le système de l'utilisateur horloge n'est pas précis à 100%, mais il est généralement très proche. Tous les principaux systèmes d'exploitation ont une certaine façon de synchroniser leurs horloges à réseau de serveurs de temps, la plupart de celles-ci sont activées par défaut. Si la personne a décidé de mettre leur ordinateur dans le "mauvais" temps de la zone, c'est probablement pour une raison (ils sont en voyage, ils travaillent avec des personnes dans un autre fuseau horaire).
Si l'utilisateur a pour une raison quelconque régler leur horloge à 10 minutes d'arrêt, ils en acceptent les conséquences des temps de calculs inexacts.
Ajouté:
Si votre serveur d'horloge est exacte (si ce n'est, comme HermanD dit, le réparer si vous contrôlez le serveur, se plaindre si vous n'en avez pas), mais n'est pas dans le bon fuseau horaire, vous pouvez toujours utiliser PHP
ini_set()
oudate_default_timezone_set()
à la force de vos scripts pour fonctionner en GMT, quel que soit le fuseau horaire du système.javascript:
sortie
11:51 AM
Id recommandons l'utilisation de serveur de temps. Dans l'exemple, le
time()
fonction. Si vous la base de TOUT cette valeur, votre système sera à l'abri de tout temps, des opérations spécifiques dont vous avez besoin.A chaque fois qu'un utilisateur demande une page qui a, ou qui utilise des contraintes de temps, assurez-vous d'envoyer le serveur de temps.
Créer un Javascript module qui, au chargement de la page, vérifie si le serveur a envoyé le moment, et si c'est la valeur, et le convertit à la JS heure locale, à l'aide d'un JS extraite ou de la durée calculée de la zone. Ensuite, vous pouvez l'enregistrer en tant que JS mondiale ou de claquer comme un static var dans un objet ou quelque chose.