Хранение даты и времени в MongoDB

Я просто хочу получить подтверждение от экспертов. Я до сих пор не уверен в том, что считаю верным способом хранения и обработки дат в таких условиях.

Я разрабатываю небольшое приложение, только для итальянских пользователей.

В принципе, они могут создавать список записей, каждый из которых имеет createDate (меня интересует только часть даты, время не полезно в моем сценарии).

Таким образом, пользователь вводит в поле формы "дата" дату в таком формате: 22/06/2014 представляет 22 июня 2014 года. Затем дата анализируется следующим образом:

entryData.dateEntry = moment( $(form).find('input[name=dateEntry]').val(), 'DD-MM-YYYY' ).toDate();

Наконец, моя модель ввода добавляется в коллекцию backbone.js и хранится на стороне сервера Node.js + Express в MongoDB.

Запросив Mongo для записей, я вижу:

2014-06-21 22:00:00 +0000

который соответствует "dateEntry": Date (1403388000000).

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

Как установить часовой пояс по умолчанию в node.js?