Я столкнулся с проблемой. Я работаю над приложением календаря. Проблема в том, что после заполнения сбора данных mongo днями года все выглядит нормально, но после извлечения данных на фронт реакции я заканчиваю с неправильным форматом даты и часовым поясом. Я попытался отладить его, и при извлечении данных с Calendar.find({}, (err, calendar)) ...
календарь кажется проанализированным с неправильной временной зоной даты. Подробнее ниже.
Хорошо, это контроллер, который заполняет базу данных днями года:
exports.generateCalendar = (req, res) => {
let days = [];
for(let i=1; i<366; i++) {
const dayOfTheWeek = new Date(new Date().getFullYear(), 0, i).getDay();
if(dayOfTheWeek === 0 || dayOfTheWeek === 6){
days.push({day: new Date(new Date().getFullYear(), 0, i), offWork: true, description: ' '});
}
else{
days.push({day: new Date(new Date().getFullYear(), 0, i), offWork: false, description: ' '});
}
}
Calendar.insertMany(days, (err) => {
res.json('done');
});
};
Вывод этого контроллера представляет собой набор документов, подобных этому:
_id: 5cefc2e5c6db7f47401ba261
offWork: false
day: 2019-01-01T00:00:00.000+01:00
description: " "
_id: 5cefc2e5c6db7f47401ba262
offWork: false
day: 2019-01-02T00:00:00.000+01:00
description: " "
Следующим шагом будет сбор всей коллекции и отправка ее на фронт с помощью этого простого контроллера:
exports.getCalendar = (req, res) => {
Calendar.find({}, (err, calendar) => {
if(err){
res.json('Error while fetching data');
}else{
res.json(calendar);
}
})
};
Однако вывод выборки:
{ offWork: false,
_id: 5cefc2e5c6db7f47401ba261,
day: 2018-12-31T23:00:00.000Z,
description: ' ',
__v: 0 },
{ offWork: false,
_id: 5cefc2e5c6db7f47401ba262,
day: 2019-01-01T23:00:00.000Z,
description: ' ',
__v: 0 },
{ offWork: false,
_id: 5cefc2e5c6db7f47401ba263,
day: 2019-01-02T23:00:00.000Z,
description: ' ',
__v: 0 },
Похоже, что при получении монго выполняется разбор даты, включая смещение часового пояса.
Я создал цикл for, который помещает новую дату в новый массив:
let calendarArray = [];
for(let i=0; i<calendar.length; i++){
calendarArray.push({day: calendar[i].day.toString(), offWork: calendar[i].offWork, description: calendar[i].description});
}
res.json(calendarArray);
И вывод этого корректен на внешнем интерфейсе, но в неправильном формате:
Tue Jan 01 2019 00:00:00 GMT+0100 (GMT+01:00)
Wed Jan 02 2019 00:00:00 GMT+0100 (GMT+01:00)
Thu Jan 03 2019 00:00:00 GMT+0100 (GMT+01:00)
Идеальным решением была бы база данных в формате YYYY-MM-DD или с тем же форматом даты в монго и после выборки.