2013-08-08 2 views
1

Как сохранить день рождения, как 09/14/1986, с помощью mongoose и преобразовать его в json с toJSON, игнорируя часовой пояс?Как правильно jsonify модель мангуста с днем ​​рождения?

Предположим, у вас есть схема, как

schema = new mongoose.Schema({ 
    birthday: Date 
}); 

и хранить день рождения выше, mongoose фактически хранит его как Date(527032800000). Теперь, когда вы звоните toJSON на модель, он преобразуется в JSON.stringify. Date s преобразуются в строку с toISOString, результатом которой является 1986-09-13T22:00:00.000Z (на машине с настройкой по умолчанию в немецком часовом поясе: Europe/Berlin). Как вы можете видеть, это не та дата, которую мы могли бы ожидать для дня рождения, потому что временной интервал интерпретируется (см. Аналогичную проблему here).

Что делать? Я не хочу потерять удобство разбора разных дней рождения и использования mongoose toJSON.

ответ

1

Проблема в том, как создается ваша дата. Я предлагаю вам использовать даты в UTC-времени для таких данных, как дни рождения, что позволит использовать UTC-раз в системе.

Вы можете:

  • установить дату в формате UTC в конструкторе, поставляя ему строку в формате UTC: new Date('1986-09-14T00:00:00.000Z');
  • использования new Date(Date.UTC(year, month, day, 0, 0, 0)); создать Date-объект из целого года, месяц и день.

Итак, ответ: вы должны магазина Дата UTC в день рождения поля при создании/обновлении модели.

Смежные вопросы