【问题标题】:Comparing dates on Typescript / Angular 4比较 Typescript / Angular 4 上的日期
【发布时间】:2018-12-13 03:11:33
【问题描述】:

我正在尝试比较 typescript/angular 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 语句,第三个是意外的。任何建议将不胜感激。

【问题讨论】:

  • 您正在将日期格式更改为字符串,例如“2018 年 7 月 4 日星期三”,然后尝试查看一个是否比另一个大?这是不正确的。保留日期值,以便您可以比较它们,或将它们转换为时间戳,以便一个大于另一个。 stackoverflow.com/questions/9873197/…
  • @Smiter 非常感谢你告诉我这个错误。

标签: angular typescript


【解决方案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]);
          }
        }
      }

【讨论】:

  • 非常感谢您的回答,它对我有用。
【解决方案2】:

只是猜测,您是否在运行时检查了日期对象的时区?

当我不得不处理本地(浏览器)日期/时间和数据库(服务器)日期/时间时,我经常遇到不同时区的问题。

一个例子: 数据库发送日期(UTC 格式),格式为“20190621T00:00:00”(符合 ISO-8601 但没有时区信息) 我使用 Date("20190621T00:00:00") 将该信息传输到 Date 对象中。

现在乐趣开始了,因为我的电脑不在 UTC 时区,而是在 +02:00。如果未提供时区,则“Date()”假定为当前时区。

因此,我的 Date-Object 然后表示日期/时间“20190621T00:00:00+02:00”。 这与“20190621T00:00:00+00:00”可能数据库想要给我的有点不同。

所以我有直接来自未来的数据库日志条目:-)

也许

let databaseDate = new Date(Date.UTC(sourceDate));
let localDate = new Date(Date.UTC());

可以帮到你吗?

热烈的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2019-05-28
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多