将日期发送到数据库后,它将保存上一个日期

时间:2018-12-19 11:59:01

标签: angular datetime

我正在通过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 :(得分:1)

由于您未指定,所以我不确定您的后端代码段中使用的是哪种语言,但是它看起来像C#?

无论如何,您要发送带时区的日期-GMT + 0200 这是一种正确的发送方式,其中包含后端正确保存日期所需的所有信息。

在后端,您正在使用DateTime.SpecifyKind转换接收的日期,SpecifyKind通过快速的网络搜索(我不知道C#)看起来像是覆盖了时区,在您的情况下,它忽略了Date的时区并将其强制为UTC。

这会产生以下效果:将时间移动您的原始日期的时区与UTC的时差(2小时),导致前一天的晚上10点而不是预期日期的午夜。

因此,请使用日期的实际时区,而不要将其覆盖为UTC。