2009-05-19 3 views
4

Gibt es eine Möglichkeit, die Zeitzone für einen Benutzeragenten ohne Javasript zu bestimmen?Legen Sie Zeitzone Offset des Benutzeragenten fest, ohne JavaScript zu verwenden?

normalerweise würde ich dieses Snippet Javascript ausführen:

<script type="text/javascript" language="JavaScript"> 
var offset = new Date(); 
document.write('<input type="hidden" id="clientTzOffset" 
name="clientTzOffset" value="' + offset.getTimezoneOffset() + '"/>'); 
</script> 

jedoch für viele Handys und Kunden, JS entweder nicht existent oder ausgeschaltet. Gibt es etwas, das ich schlau machen kann, oder bin ich darauf reduziert, "mir zu sagen, wo du bist und in welcher Zeit du bist?"

Antwort

2

mit einer Server-Seite Sprache Vielleicht könnten Sie eine IP-Lookup, tun und dann aus ihrem Land bestimmen, welche Zeitzone sie in sein könnte.

ich dies problematisch sein könnte sich vorstellen, though.

Wenn Sie diesen Weg gehen, kann diese Frage (und die Antworten) hilfreich sein.

Getting the location from an IP address

+0

könnte es eine gute erste Annäherung sein. Wie würdest du IP mit Geolocation/Zeitzone korrelieren? – MikeJ

+0

Gute GeoIP-Datenbanken können Ihnen definitiv eine Zeitzone geben (siehe http://www.siafoo.net/article/53). Dies ist jedoch weniger genau als JS. –

+0

@Matthew - natürlich, aber mit User-Agenten fehlt JS - wie Handys, es ist besser als nichts ... – MikeJ

5

Verwenden beide. Lassen Sie Javascript den Standardwert für eine Liste oder ein Textfeld festlegen. Der Prozentsatz der Leute ohne Javascript ist so klein, dass die Last winzig ist.

Ich wollte sagen "Verwenden Sie die Anfrage Datum: Header", aber das ist ein Antwort-Header nur scheint es.

1

Ich habe eine Website gesehen, wo anstatt zu fragen, in welcher Zeitzone der Benutzer drin war, einfach "die richtige Zeit auswählen" und es zeigte ihnen eine Liste von Zeiten. Es ist ein subtiler Unterschied zu "in welcher Zeitzone du bist", aber viel einfacher zu verstehen. Leider kann ich die Website nicht mehr finden

+0

Leider ist das nicht das Gleiche. Es kann die gleiche Zeit in verschiedenen Zeitzonen aufgrund von Tageslichteinsparungen und anderen Überlegungen sein. –

3

Ich dachte an eine andere Lösung, aber es ist ein wenig komplex. Richten Sie einige falsche HEAD-Anforderungen mit einem max-age: 1 Antwortheader ein, um den Browser zum erneuten Abrufen zu zwingen. Sie sollen dann erhalten Sie ein if-modified-since Header von jedem modernen Browser wie so:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 

Nur vorsichtig sein, keine Last-Modified-Header mit der ersten Antwort zu senden, weil

am besten zu erhalten Ergebnisse beim Senden eines If- Modified-Since-Headerfelds für die Cache-Validierung, Clients sind empfohlen, die genaue Datum Zeichenfolge in einem früheren Last- Modified-Header-Feld erhalten, wann immer möglich.

Beachten Sie den Haftungsausschluss "Wann immer möglich". Dies und andere Teile der Headerbeschreibung implizieren, dass der Client seine eigene Uhr verwendet, wenn er nichts von den Servern weiß.

Mit der richtigen Kombination von Headern könnte dies tatsächlich sehr gut funktionieren.

EDIT: Versucht einige Tests mit FF, konnte aber keine gültige Kombination von Headern finden, um eine if-modified-since in Client-Zeit auszulösen. FF sendet nur dann den Header, wenn er zuvor einen zuletzt geänderten Header erhalten hat und dann nur den Wert zurückgibt (auch wenn es kein gültiges Datum ist).

+0

Sehr schlau. Wenn ich heute später ins Büro komme, werde ich das einrichten. Ich denke du hast hier etwas. – MikeJ