PrimeNg的<pcalender>中的日期验证逻辑

时间:2019-08-26 16:45:31

标签: html angular typescript

我正在尝试在PrimeNG的内设置一个最小和最大日期。我希望“ FROM DATE”输入不超过今天的2周。并且“ TO DATE”输入距今天的日期不超过1年。

这是我的日期字段。

<p-calendar [showIcon]="true"  [minDate]="minDate" [readonlyInput]="true" placeholder="From Date" id="setter" ></p-calendar>

<p-calendar [showIcon]="true"   [maxDate]="maxDate" [readonlyInput]="true"placeholder="To Date" id="setter"></p-calendar>

根据我的逻辑,这是.ts文件

ngOnInit() {

    let today = new Date();
    let month = today.getMonth();
    let year = today.getFullYear();
    let prevMonth = (month === 0) ? 11 : month -1;
    let nextMonth = (month === 11) ? 0 : month + 4;
    this.minDate = new Date();
    this.maxDate = new Date();
    this.minDate.setMonth(prevMonth);
    this.maxDate.setMonth(nextMonth);

  }

View of primeNG calender

2 个答案:

答案 0 :(得分:1)

根据您所说的要求,每个日期/时间控件上都需要一个[maxDate]属性。有一个变量将“从日期”的最大值设置为从现在起不超过两周:

this.fromDateMax = new Date(Date.now() + 12096e5);

另一个变量,用于将“截止日期”的最大日期设置为从现在开始的一年:

this.toDateMax = new Date(new Date().setFullYear(new Date().getFullYear() + 1));

ngOnInit()中的这两项都将按照您的说明设置适当的限制。

这里是stackblitz供参考,还有我用来获取日期限制的两个SO答案:

  1. Javascript Date Plus 2 Weeks (14 days)
  2. Add year to todays date

答案 1 :(得分:0)

只需要对我的nhOnit()做一点调整即可。现在看起来像这样,并且完全按照我的需要工作。

ngOnInit() {

    let today = new Date();
    let month = today.getMonth();
    let year = today.getFullYear();
    let nextMonth = (month === 11) ? 0 : month + 4;
    this.minDate = new Date(Date.now() - 12096e5);
    this.maxDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));
    this.maxDate.setMonth(nextMonth);

  }