Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

timezone && mysql #40

Closed
stokaboka opened this issue May 8, 2014 · 4 comments
Closed

timezone && mysql #40

stokaboka opened this issue May 8, 2014 · 4 comments
Labels

Comments

@stokaboka
Copy link

в качестве БД - mysql, сервер sles 11
для mysql и системы указана правильная временная зона
запросы к mysql из консоли (mysql) и MySQL Workbench возвращают правильные даты (тип datetime)

запросы из impress возвращают даты приведенные к UTC (на 4 часа меньше)
в результате получаются даты и неверным днем (это зависит от времени - если время = 00:00, вычитается 4 часа и получается вчерашний день)

в Node пока чайник, в результате поисков нашлось вот это:
process.env.TZ = 'Europe/Moscow';

прописал в один из обработчиков, но изменений нет

что нужно сделать, чтобы получать даты из запросов к mysql в соответствии с временной зоной?

@tshemsedinov
Copy link
Member

Impress этим не занимается это драйвер подключения к mySQL в строке подключения (см в /applications/.../config/databases.js) параметр timezone, например 'mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700'
Вот тут можно подробнее посмотреть https://github.com/felixge/node-mysql

@stokaboka
Copy link
Author

прописал в databases.js "...?timezone=+0400",
запросы по прежнему возвращают даты в UTC (если смотреть json, который приходит с сервера)

клиентская часть делается на angularjs - теперь при отображении используется фильтр "date" и "фильтрованная" дата показана верно (в соответствии с зоной клиента).

в итоге, получается, что все работает правильно - дата/время передается в utc, клиент приводит в правильный вид в соответствии со своей зоной

@tshemsedinov
Copy link
Member

Ничего не понял, добавление timezone к конекшенстрингу БД должно решать проблему, если вы делаете коррекцию даты в нескольких местах, то это может слететь при переносе или повторном развертывании системы.

@stokaboka
Copy link
Author

вы совершенно правы: коррекция даты в нескольких местах, но в теории такого
эффекта не должно было получиться (или мне так казалось...)

если коротко - 2 раза дата приводится к UTC 1-toISOString, 2-node-mysql

а подробнее - происходит вот что:

  1. в интерфейсе создаем дату: Tue May 02 1967 04:00:00 GMT+0400
  2. перед сохранением в БД конвертирую в ISO (toISOString()) :
    "1967-05-02T00:00:00.000Z"
    дата приводится к UTC и именно так сохраняется в базе
  3. загружаем сохраненные данные, дата = "1967-05-01T20:00:00.000Z" - node-mysql
    думает, что дата со смещением и еще раз приводит к UTC
  4. теперь при отображении все зависит от часов, которые получились после
    преобразований
    фильтр ангуляра считает что дата в UTC и добавляет смещение:
    1967-05-01T20:00:00.000Z
    -> (+0400) -> 1967-05-02T00:00:00.000Z, отображается как 02.05.1967
    но это только представление данных - сама дата не меняется

в случае, если создана дата Tue May 01 1967 00:00:00 GMT+0400, то
получится такая цепочка:

  1. Tue May 01 1967 00:00:00 GMT+0400
  2. 1967-04-30T20:00:00.000Z
  3. 1967-04-30T16:00:00.000Z
  4. 1967-04-30T20:00:00.000Z - отображается как 30.04.1967, а должно
    01.05.1967

в общем, проблема понятна, нужно правильно ее решить
поэкспериментирую с разными вариантами,
но как-то это не совсем верно - в настройках нужно правильно указывать
локальные параметры, даты хранить в utc, а затем приводить к локальной
тайм-зоне...

12 мая 2014 г., 17:37 пользователь Timur Shemsedinov <
notifications@github.com> написал:

Ничего не понял, добавление timezone к конекшенстрингу БД должно решать
проблему, если вы делаете коррекцию даты в нескольких местах, то это может
слететь при переносе или повторном развертывании системы.


Reply to this email directly or view it on GitHubhttps://github.com//issues/40#issuecomment-42832369
.

С уважением,
Игорь

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants