2009-02-03 4 views
4

Est-il possible sur un serveur Web de déterminer l'heure locale et le fuseau horaire de l'utilisateur lors de l'envoi de la requête?Est-il possible de déterminer l'heure de l'utilisateur à partir d'une requête Web?

Pourrait-il être fait en utilisant javascript pour le capturer et le renvoyer au serveur?

Mon entreprise veut savoir combien d'utilisateurs utilisent notre site en dehors des heures de bureau (non, je ne sais pas vraiment pourquoi!).

Merci.

+0

Bonne question;) +1 – Sergio

+0

Merci à tous, je me rends compte que sa fonction de l'utilisateur ayant correctement réglé leur horloge. –

Répondre

6

Vous devez placer l'heure JavaScript du client dans un champ masqué et supposer que son horloge est correctement définie.

myTime = new Date() >> Tue Feb 03 2009 12:24:28 GMT-0500 (Eastern Standard Time) 
+0

Battre moi au coup de poing :) –

+0

Vous devez également supposer qu'ils n'ont pas désactivé Javascript ... –

2

Vous pouvez charger une date dans un champ masqué en utilisant JavaScript:

var newDate = new Date(); 
hiddenFieldName.value = newDate.toLocaleString(); 

ensuite sur le postback à la benne sever que sur le terrain.

+0

Faites-vous une faveur et utilisez newDate.toUTCString() à la place. toLocaleString vous donne une chaîne dans la langue des utilisateurs. – some

1

JavaScript est en effet le chemin à parcourir.

Heureusement, le web contient lots of sample code you can use. This page semble assez complet.

Il convient de noter que le courant de connaître quelqu'un décalage est pas le même que connaître leur fuseau horaire, mais il est probablement assez pour vos besoins :)

0

Eh bien, vous pouvez lire l'heure locale du navigateur avec JavaScript:

var now = new Date(); 

Ensuite, vous pouvez poster sur le serveur en utilisant XMLHttpRequest ou un champ caché ...

1

Certes, vous pouvez inclure un horodatage client dérivé JS et l'envoyer ba ck est ajouté à une autre requête, mais il est complètement non fiable car l'utilisateur peut définir l'heure de son client sur tout ce qu'il veut, et cela nécessite une seconde requête qui pourrait être légèrement abusive, ou techniquement maladroite à assurer. Un grand nombre d'implémentations le feront en tirant et en oubliant une requête AJAX pour un fichier texte, ou en ajoutant une seule image pixel vide à la page. Vous pouvez essayer de dériver une mesure similaire basée sur les premières demandes et de géolocaliser un emplacement IP et un horodatage GMT en vous donnant une heure locale - mais cela pourrait être coûteux si vous n'avez pas déjà une base de données IP/Geo :)

+0

C'est un bon point sur la publication, à moins que j'utilise AJAX cela ne fonctionnera pas pour les demandes initiales. –

+0

et il ne fonctionnera pas du tout pour noscript – annakata

2

Vous devez envisager la résolution DNS inverse de vos journaux de serveur Web existants. Vous pouvez ensuite utiliser le géocodage pour deviner le fuseau horaire de l'utilisateur (et son heure locale par rapport à l'heure de votre serveur Web).

Vous n'avez pas besoin d'écrire du nouveau code JavaScript, d'écrire du code côté serveur personnalisé pour consigner les heures utilisateur, puis de déployer un site Web mis à jour.

Ce script Perl peut être un exemple utile: Perl Script that Does Bulk Reverse-DNS Lookups

Questions connexes