Запутался с временными поясами

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.527
Реакции
121
Какое значение сохранять в базу, какое выводить пользователю и и админу?
Например, пользователь добавил запись. Если сохраняю в базу увеличенное время У него +4. У меня +3. В админке я увижу время, которое еще у меня не наступило.
Если сохранять серверное время, а пользователю перед выводом увеличивать, а затем отнимать перед обновлением поста, например, вроде все правильно.
А что будет, если пользователь изменит пояс, например, переехал. Все его старые посты (даты) изменятся, получается.
Просто не могу сообразить сразу все возможные ситуации в голове, что да как.
Подскажите, пожалуйста, как правильно?
 
UNIX-время (Для просмотра ссылки Войди или Зарегистрируйся Unix time) или POSIX-время — система описания моментов во времени, принятая в Для просмотра ссылки Войди или Зарегистрируйся и других Для просмотра ссылки Войди или Зарегистрируйся-совместимых Для просмотра ссылки Войди или Зарегистрируйся. Определяется как количество секунд, прошедших с Для просмотра ссылки Войди или Зарегистрируйся (00:00:00 Для просмотра ссылки Войди или Зарегистрируйся) Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся (четверг); время с этого момента называют «эрой UNIX» (Для просмотра ссылки Войди или Зарегистрируйся Unix Epoch).
 
Хранить всё в едином GMT, выводить в зависимости от GMT пользователя.
Учесть, что бд можете переехать на сервер с другим GMT.
Учесть, что БД и PHP могут иметь разные пояса.
 
Хранить всё в едином GMT, выводить в зависимости от GMT пользователя.
Учесть, что бд можете переехать на сервер с другим GMT.
Учесть, что БД и PHP могут иметь разные пояса.
Думал быстро разберусь, а фиг там. Чем больше читаю, тем больше тупею...
вопросы:
1. Т.е. при сохранении нового поста сохранять в БД время сервера (timestamp)?
2. Тогда вопрос, как выводить даты в списке постов? С учетом пояса пользователя? А если это гость?
3. Как админу вывести дату создания поста при его редактировании, если в БД сохранено время сервера, как добавить к этому времени временной пояс пользователя, который добавил пост? Или нужно в этом случае задать в date_default_timezone_set пояс админа?
Получаю дату добавления поста (по серверному времени), устанавливаю date_default_timezone_set, вывожу date('Y-m-d H:i:s',$dt), дата не меняется, что с date_default_timezone_set, что без.
Логика в мышлении сбилась :)
 
Последнее редактирование:
в бд лучше всегда сохранять TIMESTAMP, это время серверное. Потом его уже конвертировать, если пользователь заходит с другого пояса.
Есть сервисы, определяющие местонахождение и часовой пояс по ip. Стучишься туда, он тебе возвращает timezone юзера и конвертишь твой timestamp из базы. Ну это как вариант :)
 
в бд лучше всегда сохранять TIMESTAMP, это время серверное. Потом его уже конвертировать, если пользователь заходит с другого пояса.
Есть сервисы, определяющие местонахождение и часовой пояс по ip. Стучишься туда, он тебе возвращает timezone юзера и конвертишь твой timestamp из базы. Ну это как вариант :)
а как конвертировать timestamp, не могу найти?
 
а как конвертировать timestamp, не могу найти?

mysql> SELECT FROM_UNIXTIME(1447430881);
Для просмотра ссылки Войди или Зарегистрируйся


1. Т.е. при сохранении нового поста сохранять в БД время сервера (timestamp)?
в бд лучше всегда сохранять TIMESTAMP, это время серверное.
TIMESTAMP это формат записи времени как int числа.
И с ним также можно натворить беды при неправильном обращении:
PHP:
var_dump(    date('r', PHP_INT_MAX) , gmdate('r', PHP_INT_MAX), PHP_INT_MAX ); //максимальная дата, которая может храниться в таком формате

var_dump(    date('r', PHP_INT_MAX + 10) , gmdate('r', PHP_INT_MAX + 10)); //имитация того что где-то что-то пошло не так, которая вернёт нас в 1901 год ;)

Для выбора формата времени в бд надо ответить на вопросы как мы его будем получать и запрашивать.
Вот неплохое введение для начала понимания: Для просмотра ссылки Войди или Зарегистрируйся
 
Для выбора формата времени в бд надо ответить на вопросы как мы его будем получать и запрашивать.
Вот неплохое введение для начала понимания: Для просмотра ссылки Войди или Зарегистрируйся
Я планировал все это делать на php. Для MySQL нужно определять смещение, вести как-то учет названий поясов и т.п.
 
Так же вот статья на английском по данной тематике: Для просмотра ссылки Войди или Зарегистрируйся
Хранить отдельно часовой пояс пользователя в любом случае придётся, если, конечно, не получать его по IP.
 
в TIMESTAMP я бы не стал хранить время.
во-первых огребете геморой с часовыми поясами изначально,
в вторых визуально не видно ни дату ни время

имхо лучше хранить в формате DATETIME
 
Назад
Сверху