将日期与打字稿中的数字进行比较

时间:2018-07-06 07:30:53

标签: typescript

很长一段时间,我有4个字符串,2个用于客户端,2个用于服务器(模拟),这个字符串是客户端中的日期“ 03/06/2016”和“ 2018-11-23T00:00:00 + 01” :00“。

我将字符串转换为日期,然后再次将字符串转换为相同格式的字符串“ dd / mm / aaaa”,然后将字符串放入Split中,最后我解析为int。

当我有2个数字时,我可以比较并过滤角度,它可以运行,但是现在我没有服务器(模拟),现在我也不知道为什么它不运行...

 transformDate(filterDate: string) {

    let date: any;

    if (filterDate !== undefined && filterDate !== '') {
      let day, month;

      date = filterDate.split('/');

      day = date[0];
      month = date[1];

      if (day.lenght < 2) {
        day = '0' + day;
      }

      if (month.length < 2) {
        month = '0' + month;
      }

      date = parseInt(date[2] + month + day, 10);

    } else {
      date = false;
    }

    return date;
  }

 public filterResult(url: string, id: number, filterDateStart: string, filterDateEnd: string): Observable<any> {

return this.http.get<any>(url).pipe(map(param => {

  let filter, dateStart, dateEnd;

  dateStart = this.transformDate(filterDateStart);
  dateEnd = this.transformDate(filterDateEnd);

  if (!isNaN(id)) {
    filter = param.filter(
      dato => dato.id === id);
  } else {
    if (!dateStart && !dateEnd) {
      filter = param;
    } else {
      if (dateStart && dateEnd) {
        filter = param.filter(dato => {

        if (
            this.transformDate(new Date(dato.startdatevalidity).toLocaleDateString()) >= dateStart
            && this.transformDate(new Date(dato.enddatevalidity).toLocaleDateString()) <= dateEnd
        ) {
          return filter = dato;
        } else {
          console.log( 'no entro');
          console.log( 'en cliente inicio' , dateStart);
          console.log( 'en cliente fin' , dateEnd);

          console.log( 'servidor inicio', this.transformDate(new Date(dato.startdatevalidity).toLocaleDateString()));
          console.log( 'servidor fin', this.transformDate(new Date(dato.enddatevalidity).toLocaleDateString()));

          console.log('type' , typeof(this.transformDate(new Date(dato.startdatevalidity).toLocaleDateString())) );
          console.log('type' , typeof(dateStart) );

        }});
      } else {

        if (dateStart && !dateEnd) {
          filter = param.filter(dato => {
            if (this.transformDate(new Date(dato.startdatevalidity).toLocaleDateString()) >= dateStart) {
              return filter = dato;
            }});
        } else {
          filter = param.filter(dato => {
            if (this.transformDate(new Date(dato.enddatevalidity).toLocaleDateString()) <= dateEnd) {
              return filter = dato;
            }});
        }
      }
    }
  }

  return filter;
}));

enter image description here

在此示例中,我尝试使用DateStart和DateFinish作为日期范围

1 个答案:

答案 0 :(得分:0)

我建议您使用 Moment.js 之类的库。

摘自文档Moment.js for Typescript

  

从2.13.0版开始,Moment包含一个打字稿定义文件。

     

通过NPM安装

npm install moment
     

导入并在您的Typescript文件中使用

import * as moment from 'moment';

然后,这是一个如何与Moment.js比较日期的示例:

  

早于2.0.0

moment().isBefore(Moment|String|Number|Date|Array);
moment().isBefore(Moment|String|Number|Date|Array, String);
     

检查一个时刻是否在另一个时刻之前。第一个参数是   解析(如果尚未解析)。

moment('2010-10-20').isBefore('2010-10-21'); // true

您可以找到有关日期比较here的完整文档。

我希望这会对您有所帮助。