我正在通过Angular向我的mongoDb集合发送日期。
我认为这里的问题与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;
}
});
};
答案 0 :(得分:1)
由于您未指定,所以我不确定您的后端代码段中使用的是哪种语言,但是它看起来像C#?
无论如何,您要发送带时区的日期-GMT + 0200 这是一种正确的发送方式,其中包含后端正确保存日期所需的所有信息。
在后端,您正在使用DateTime.SpecifyKind转换接收的日期,SpecifyKind通过快速的网络搜索(我不知道C#)看起来像是覆盖了时区,在您的情况下,它忽略了Date的时区并将其强制为UTC。
这会产生以下效果:将时间移动您的原始日期的时区与UTC的时差(2小时),导致前一天的晚上10点而不是预期日期的午夜。
因此,请使用日期的实际时区,而不要将其覆盖为UTC。