Определить смещение часового пояса агента пользователя без использования JavaScript? - PullRequest
4 голосов
/ 19 мая 2009

Есть ли способ определения часового пояса для пользовательского агента без JavaScript?

нормально, я бы выполнил этот фрагмент JavaScript:

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

Однако для многих мобильных телефонов и клиентов JS либо не существует, либо отключен. Есть ли что-то умное, что я могу сделать, или я вынужден «сказать мне, где ты и в каком тимзеоне ты находишься?»

Ответы [ 4 ]

5 голосов
/ 19 мая 2009

Используйте оба. Пусть javascript установит значение по умолчанию для списка или текстового поля. Процент людей без javascript настолько мал, что бремя ничтожно.

Я собирался сказать «Использовать дату запроса: заголовок», но это только заголовок ответа.

3 голосов
/ 21 мая 2009

Я думал о другом решении, но оно немного сложное. Настройте несколько поддельных запросов HEAD с заголовком ответа max-age: 1, чтобы заставить браузер повторно извлечь их. Затем вы должны получить заголовок if-Modified-Since от любого современного браузера, например:

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

Только будьте осторожны, чтобы не отправлять заголовки Last-Modified с первым ответом, потому что

Чтобы получить наилучшие результаты при отправке Modified-Since поле заголовка для проверки кэша, клиенты рекомендуется использовать точную строку даты, полученную в предыдущем Измененное поле заголовка, когда это возможно.

Обратите внимание на отказ от ответственности, когда это возможно. Эта и другие части описания заголовка подразумевают, что клиент будет использовать свои собственные часы, когда он ничего не знает о серверах.

При правильной комбинации заголовков это может действительно работать очень хорошо.

РЕДАКТИРОВАТЬ: пробовал некоторые тесты с FF, но не смог найти правильную комбинацию заголовков для запуска if-Modified-Since во время клиента. FF отправляет заголовок только в том случае, если он получил последний измененный заголовок ранее, а затем он просто отражает значение обратно (даже если это недействительная дата).

2 голосов
/ 19 мая 2009

Может быть, с помощью языка на стороне сервера вы можете выполнить поиск IP, а затем определить из своей страны, в каком часовом поясе они могут быть.

Я думаю, что это может быть проблематично.

Если идти по этому пути, этот вопрос (и ответы) может оказаться полезным.

Получение местоположения с IP-адреса

1 голос
/ 19 мая 2009

Я видел веб-сайт, где вместо того, чтобы спрашивать, в каком часовом поясе находился пользователь, он просто спрашивал «выбрать правильное время», и он показывал им список раз. Это тонкое отличие от «в каком часовом поясе вы находитесь», но гораздо проще для понимания. К сожалению, я больше не могу найти сайт

...