Игорь_Vasinsky
22.11.2016 - 19:03
Эли4ка
так я всего лишь повторил слова, ваше написанные, ответчиков) я по сути ничего и не сделал вообще)
как бы они оба в цвет ответили одинаково)
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
22.11.2016 - 20:53
Цитата (Эли4ка @ 22.11.2016 - 15:36) |
Боже.какая я тупая...я два дня полоскала всем мозги такой простой фигней...нет.чтобы почитать мануал... ребят,плюсики в репутацию чуть позже-сейчас закреплю,чтобы не забыть Спасибо всем огромное :) |
За что спасибо? За то что направили по ложному пути?
Цитата (depp @ 21.11.2016 - 12:02) |
unixtime - плохой формат хранения даты в базе. мое мнение. |
Цитата (Игорь_Vasinsky @ 22.11.2016 - 14:32) |
Эли4ка ну про формат хранения данных надеюсь тебе понятно - крайне не удачный. |
Что за коллективный бред?

Цитата (Эли4ка @ 21.11.2016 - 09:45) |
зная смещение часового пояса(оно известно,ничего определять php,mysql'ом не нужно) |
вообще никаких проблем, после инициализации коннекта бд
SET time_zone='+03:00'
и забудь про костыли с конвертацией часовых поясов.
Эли4ка
23.11.2016 - 07:05
killer8080,эм..а почему по ложному?Ведь я показала свой запрос,и он работает.как надо?
Цитата |
вообще никаких проблем, после инициализации коннекта бд
SET time_zone='+03:00'
и забудь про костыли с конвертацией часовых поясов. |
а SELECT как делать?
Цитата (killer8080 @ 22.11.2016 - 20:53) |
Что за коллективный бред? |
бред? раз делаешь такие заявления - неплохо было бы высказать почему ты так думаешь.
иначе голословное утверждение.
Игорь_Vasinsky
23.11.2016 - 12:26
Цитата |
а SELECT как делать? |
SET time_zone='+03:00';
SELECT.......
но уже нет необходимости в самом селекте часовой пояс учитывать
но чёт сдаётся - это не твой случай, если в запросе 2 разных пояса
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
23.11.2016 - 13:45
Цитата (Эли4ка @ 23.11.2016 - 07:05) |
killer8080,эм..а почему по ложному?Ведь я показала свой запрос,и он работает.как надо? |
потому что решение костыльное, каждый раз в каждом запросе нужно помнить о необходимости конвертации TZ.
Цитата (Эли4ка @ 23.11.2016 - 07:05) |
а SELECT как делать? |
как обычно, timestamp будет выводится в соответствии с текущим часовым поясом.
Цитата (Игорь_Vasinsky @ 23.11.2016 - 12:26) |
но чёт сдаётся - это не твой случай, если в запросе 2 разных пояса |
у каждого пользователя свой часовой пояс, одновременно не нужно работать с двумя.
time_zone сессионная переменная, она действует только для текущего соединения с бд.
http://dev.mysql.com/doc/refman/5.7/en/ser...ysvar_time_zoneЦитата (depp @ 23.11.2016 - 11:13) |
бред? раз делаешь такие заявления - неплохо было бы высказать почему ты так думаешь. иначе голословное утверждение. |
Ну раз это не очевидно, объясню
Всегда и везде где можно использовать timestamp, нужно использовать timestamp. DATETIME нужно избегать и использовать только там, где дата выходит за диапазон timestamp. К сожаления mysql слишком консервативный в этом плане и до сих пор использует 31 бит для этого формата. В PHP такой проблемы давно нет, во первых допускаются отрицательные значения int, во вторых в 64 битном PHP. timestamp 64 бита, что с лихвой перекрывает потребности. В mysql же приходится мирится с устаревшим подходом.
Чем timestamp лучше datetime?
- время в нём в абсолютном формате, всегда в UTC и не зависит от настроек сервера, СУБД автоматически конвертирует его на лету при выводе и вводе в соответствии со значением time_zone
- использовать now() и т.п. не задумываясь над тем какой часовой пояс на сервере, при переносе базы с одного хостинга на другой можно быть уверенным, что ничего не сломается, новые записи будут с правильным временем, и не окажутся старше предыдущих, с другого сервера из-за географической разности во времени.
- не нужны костыли с конвертацией в каждом запросе.
- автоматическая инициализация (для DATETIME стала доступна только с версии 5.6)
Эли4ка
23.11.2016 - 14:18
Цитата |
потому что решение костыльное, каждый раз в каждом запросе нужно помнить о необходимости конвертации TZ |
killer8080,а так придется ставить
SET time_zone='+03:00';
перед запросом?
killer8080
Просто уточнить.
Если разница во времени хранится в БД (в часах int(1) ), возможен вариант, установить time_zone после выборки, чтобы все дальнейшие действия заносились с учетом часового пояса ?
killer8080
23.11.2016 - 16:30
Цитата (Эли4ка @ 23.11.2016 - 14:18) |
killer8080,а так придется ставить SET time_zone='+03:00';
перед запросом? |
правильней сказать, инициировать переменную после установки соединения с бд, Не вижу тут никаких проблем, это в любом случае нужно делать, так же как и устанавливать кодировку. В любом случае это делается один раз, а не в каждом запросе. С datetime ты можешь только догадываться какая была настройка сервера в тот момент, когда заносилась запись, особенно проблем это доставит с переходами зимнее/летнее время.
Цитата (Kusss @ 23.11.2016 - 15:00) |
killer8080 Просто уточнить. Если разница во времени хранится в БД (в часах int(1) ), возможен вариант, установить time_zone после выборки, чтобы все дальнейшие действия заносились с учетом часового пояса ? |
эта просто переменная, ты можешь её менять хоть перед каждым запросом, но обычно надобности в этом нет.
killer8080
Ну у меня пользователь привязан к магазинам, а магазин может быть в другом часовом поясе. Между магазинами можно переподключаться, отсюда и вопрос.
Я понял что это как раз самое то.
Эли4ка
23.11.2016 - 18:50
Цитата |
С datetime ты можешь только догадываться какая была настройка сервера в тот момент, когда заносилась запись, особенно проблем это доставит с переходами зимнее/летнее время. |
killer8080,выставлять UTC или GMT ??
killer8080
23.11.2016 - 20:26
Цитата (Эли4ка @ 23.11.2016 - 18:50) |
killer8080,выставлять UTC или GMT ?? |
Само собой, и потом при выводе конвертить, а если в базу пишутся дата/время введённые пользователем, то же не забывать конвертировать. Вопрос только зачем такие сложности, когда есть timestamp и автоматический вывод в текущей TZ.
Цитата (Kusss @ 23.11.2016 - 17:07) |
killer8080 Ну у меня пользователь привязан к магазинам, а магазин может быть в другом часовом поясе. Между магазинами можно переподключаться, отсюда и вопрос. Я понял что это как раз самое то. |
Не совсем понял, что значит "переподключать пользователя"? Это разные магазины, на разных серверах, с разными бд?
Эли4ка
24.11.2016 - 09:25
killer8080
Цитата |
при выводе конвертить |
,
CONVERT_TZ
им же?или
SET time_zone
?
И тогда получается если пользователь хочет получить данные за 2016 24 ноября 11 часов 23 минуты мы ставим SET time_zone кконвертируем время в unix и SELECT?
killer8080
24.11.2016 - 10:03
Цитата (Эли4ка @ 24.11.2016 - 09:25) |
И тогда получается если пользователь хочет получить данные за 2016 24 ноября 11 часов 23 минуты мы ставим SET time_zone кконвертируем время в unix и SELECT? |
ничего конвертировать не нужно, установила в time_zone часовой пояс пользователя и работаешь так, как если бы юзер и сервер находились в одном часовом поясе. Если он ввел "2016 24 ноября 11 часов 23 минуты", значит получит выборку относительно своего, локального времени.
Эли4ка
24.11.2016 - 11:13
killer8080поняла

спасибо огромное,что разъяснили
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.