Хранение даты и часовых поясов в MongoDB
Я просто хочу получить подтверждение от экспертов. Я все еще не уверен в том, что считаю правильным способом хранения и обработки дат в такой среде.
Я разрабатываю небольшое приложение, только для итальянских пользователей.
в принципе, они могут создать список записи С creationDate (меня просто интересует дата, время не полезно в моем сценарии).
Итак, пользователь вводит в поле" Дата " формы дата в этом формате: 22/06/2014 представляет 22-й день июня 2014 года. Затем дата анализируется следующим образом:
entryData.dateEntry = moment( $(form).find('input[name=dateEntry]').val(), 'DD-MM-YYYY' ).toDate();
наконец, моя модель входа добавляется в магистраль.коллекция JS и хранимых серверных узлов.JS + Express в MongoDB.
запрос Монго для записей, я вижу:
2014-06-21 22:00:00 +0000
что соответствует "dateEntry": Date( 1403388000000 ).
погуглите вокруг я обнаружил, что MongoDB не имеет понятия часового пояса. Все даты хранятся в формате UTC, а объект даты, который я создал раньше, имел GMT+2. Но я действительно боюсь... как я смогу легко вернуть дату моего местного часового пояса?
далее, я буду отображать данные ввода в шаблоне подчеркивания, таким образом:
<%= moment(dateEntry).format('DD/MM/YYYY') %>
и... вуаля! Я получаю свою местную "итальянскую" дату: 22/06/2014.
Итак, мой вопрос: это правильный путь?
процесс: анализировать даты в локальном часовом поясе = > хранить в utc => получать даты в локальном часовом поясе. это обычная практика?
Я также подумал:не могу ли я просто избежать использования часовых поясов и хранения моего местного (итальянского) времени, как это было время utc (2014-06-22 00:00: 00)? это так плохо?
1 ответов
Да, это обычная практика для хранения всех временных меток в UTC, а затем преобразовать его в определенные часовые пояса во внешних слоях. Многие фреймворки автоматически делают это для вас, включая Rails. Предположим, если вы начнете обслуживать и другие часовые пояса, вы не столкнетесь с проблемами, потому что ваша БД имеет записи UTC. Вы будете сохранены накладные расходы преобразования часового пояса.
Если вы хотите сохранить только даты, вы можете сделать это, но я не вижу никакого вреда в том, как вы это делаете в настоящее время - сохраните все в UTC. Я не уверен насчет node.js но будет некоторая настройка, где вы можете указать часовой пояс (Италии), и все ваши преобразования будут происходить автоматически. Вы можете найти эту тему полезной: