после того, как дата отправлена ​​в БД, сохраняется предыдущая дата - PullRequest
0 голосов
/ 19 декабря 2018

Я отправляю дату через Angular в мою коллекцию mongoDb.

это то, что я отправляю enter image description here

, и это то, что я получаю enter image description here

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

Как отправить эту дату по-сердечному?

this.holidayClicked = function (day: CalendarMonthViewDay): Observable<boolean> {
        const username = 'dinchmle';
        const holiday = new EmployeeHoliday();
        // transform date in UTC date
        holiday.date = day.date;
        holiday.date.setHours(0, 0, 0);
        holiday.date.setUTCDate(day.date.getUTCDate());
        holiday.date.setUTCMonth(day.date.getUTCMonth());
        holiday.date.setUTCFullYear(day.date.getUTCFullYear());
        holiday.state = that.stateSelected;
        holiday.comment = '';

        return that.calendarService.updateEmployee(username, holiday).map(
          response => {
            if (holiday && holiday.state !== 1) {
              return true;
            } else {
              return false;
            }
          });
      };

1 Ответ

0 голосов
/ 19 декабря 2018

Поскольку вы не указали, я не уверен, какой язык есть в вашем внутреннем фрагменте, но он выглядит как C #?

В любом случае, вы отправляете дату с часовым поясом - GMT+0200 Это правильный способ его отправки, содержащий всю информацию, которая нужна серверу для правильного сохранения даты.

На сервере вы преобразовываете полученную дату в DateTime.SpecifyKind, который из быстрого веб-поиска (я не знаю C #) выглядит так, как будто он переопределяет часовой пояс, в вашем случае - игнорировать часовой пояс даты и принудительно установить его в UTC.

Это приведет к смещению времени на величину смещения часового пояса вашей первоначальной даты от UTC (2 часа), что приведет к 22:00 предыдущего дня вместо 00:00 ночи в намеченный день.

Итак, используйте фактический часовой пояс Даты вместо переопределения его в UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...