我正在尝试比较日期为 typescript /角度4 的日期。就我而言,我将系统日期分配给名为“ today”的变量,并将数据库日期分配给名为“ dateToBeCheckOut”的变量。然后,我使用if语句比较了日期,就我而言,我希望得到的结帐日期是小于(之前)的日期。但是我得到意想不到的结果而不是预期的结果。我在下面附上了代码,并希望有人帮助理解它的发生原因。
这是代码
for(let k = 0; k < this.bookingDetailsArrayRealObject.length; k++){
let dateCheckOut = this.bookingDetailsArrayRealObject[k].package.chackout;
let dateToBeCheckOut = new Date(dateCheckOut);
let today = new Date(Date.parse(Date()));
//let today_test = new Date();
if(this.bookingDetailsArrayRealObject[k].status){
if(dateToBeCheckOut.toDateString() < today.toDateString()){
this.bookingIdsToBeUpdated.push(this.bookingDetailsArrayRealObject[k]._id);
window.alert('true');
console.log(today.toDateString());
console.log(dateToBeCheckOut.toDateString());
console.log(this.bookingDetailsArrayRealObject[k]);
}
}
}
在控制台结果中,根据if语句,第三个异常。任何建议,将不胜感激。
答案 0 :(得分:1)
您可以比较日期对象而无需将其强制转换为字符串。试试:
for(let k = 0; k < this.bookingDetailsArrayRealObject.length; k++){
let dateCheckOut = this.bookingDetailsArrayRealObject[k].package.chackout;
let dateToBeCheckOut = new Date(dateCheckOut);
let today = new Date();
//let today_test = new Date();
if(this.bookingDetailsArrayRealObject[k].status){
if(dateToBeCheckOut < today){
this.bookingIdsToBeUpdated.push(this.bookingDetailsArrayRealObject[k]._id);
window.alert('true');
console.log(today.toDateString());
console.log(dateToBeCheckOut.toDateString());
console.log(this.bookingDetailsArrayRealObject[k]);
}
}
}
答案 1 :(得分:0)
一个猜测,您是否在运行时检查了日期对象的时区?
当我不得不处理本地(浏览器)日期/时间和数据库(服务器)日期/时间时,我经常遇到时区不同的问题。
一个例子: 数据库以“ 20190621T00:00:00”格式发送日期(以UTC表示)(符合ISO-8601,但没有时区信息) 我将带有Date(“ 20190621T00:00:00”)的信息传输到Date对象中。
现在开始好玩了,因为我的计算机不在UTC时区,而是在+02:00。如果没有交付时区,则“ Date()”将采用当前时区。
结果,我的日期对象然后表示日期/时间“ 20190621T00:00:00 + 02:00”。 那和“ 20190621T00:00:00 + 00:00”有点不同,数据库可能想要给我什么。
所以我有直接来自未来的数据库日志条目:-)
也许
let databaseDate = new Date(Date.UTC(sourceDate));
let localDate = new Date(Date.UTC());
能为您提供帮助吗?
亲切的问候