2011-01-22 2 views
1

Hey Stackfriends = P Я знаю о времени() и функциях даты(), , но я хочу, чтобы пользователь из Китая получил другое время, чем пользователь из Франции. Я не могу использовать JavaScript, потому что я также использую локальное время для некоторых вычислений.Пользователи PHP по местному времени

+0

Java-скрипт или нет, вы не можете доверять данным, поступающим с клиентской стороны. – Mikk

ответ

1

Есть два хороших решения:

  • запрашивает у пользователя его часового пояса; предварительно выберите вариант по умолчанию, основанный на часовом поясе, в котором большинство ваших пользователей приходят и/или в локальный часовой пояс, обнаруженный с помощью JavaScript.
  • Просто используйте UTC (GMT) на своем веб-сайте.

Очевидно, что это зависит от вашего сайта, какой вариант подходит. На сайте, таком как stackoverflow option 2, используется и имеет наибольший смысл, поскольку существуют различные события, которые основаны на днях, поэтому дни должны меняться одновременно для всех пользователей.

+0

Ну, я делаю сценарий, в котором пользователю нужно знать, что произошло вчера. Итак, ваш первый вариант - лучший, в моем случае. Спасибо, я отвечу на ваш ответ как ответ :) – SuperSpy

0

Одним из способов было бы использовать что-то вроде IP to City database from MaxMind - это может дать вам часовой пояс для IP-адреса для пользователей.

В качестве альтернативы просто спросите пользователя, какой часовой пояс они предпочитают, и запомните его в переменной cookie или сессии.

+0

Это слишком ненадежно ... – SuperSpy

+0

Не уверен, почему надежность должна быть проблемой для используемого вами варианта использования. Вы можете порадовать пользователя, угадывая их часовой пояс в 99% случаев, а для остальных - позволяйте им настраивать его. –

0

Несмотря на то, что мне никогда не приходилось его использовать, есть некоторые функции, позволяющие установить часовой пояс и другие функции даты, чтобы рассказать вам о разнице между настройкой текущего часового пояса и GMT. Они могут вам помочь.

http://php.net/manual/en/datetime.settimezone.php

http://php.net/manual/en/function.date.php

3

Единственное, что должен остановить вас от использования JavaScript, если а) вы просто обслуживая API и не имеют никакого контроля над содержанием страницы; или b) клиент заблокировал javascript в любом случае. Через javascript самый надежный метод, за исключением простого запроса пользователю ввести свой часовой пояс.

Cookies или ajax будут работать. Для более легкого печенья образом, поставить этот JavaScript в вашем головном разделе на любой странице, чтобы добавить печенье ...

<script> 

d = new Date; 
gmtoffset = d.getTimezoneOffset()/60; 
document.cookie = 'gmtoffset=' + gmtoffset; 

</script> 

Тогда в вашем PHP скриптах, читайте $_COOKIE['gmtoffset'], чтобы получить их часовой пояс по Гринвичу.

IMHO, время клиента w/часовой пояс должно быть отраслевым стандартным заголовком запроса.

Edit: удален «истекает» даты, например печенье, поскольку это может вызвать проблемы после 1 января 2012 года

+0

Я использовал ваш код в другой части моего скрипта. Благодаря! – SuperSpy

+1

@SuperSpy: Np. Просто не забудьте указать дату истечения срока действия в cookie - время текущего клиента + несколько дней всегда лучше или оставить его, поэтому cookie истекает в конце сеанса просмотра клиента. –

Смежные вопросы