在Typescript / Angular 4上比较日期

时间:2018-07-04 16:16:53

标签: angular typescript

我正在尝试比较日期为 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]);
          }
        }
      }

booking object from database

console result

在控制台结果中,根据if语句,第三个异常。任何建议,将不胜感激。

2 个答案:

答案 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());

能为您提供帮助吗?

亲切的问候