Хранение даты и часовых поясов в 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 но будет некоторая настройка, где вы можете указать часовой пояс (Италии), и все ваши преобразования будут происходить автоматически. Вы можете найти эту тему полезной:

как я могу установить часовой пояс по умолчанию в узле.Яш?