Angular 如何计算从现在到申报日的总天数?

Angular 如何计算从现在到申报日的总天数?,angular,angular2-template,angular-ng-if,Angular,Angular2 Template,Angular Ng If,您好,我想将一天与当前日期进行比较,得到总天数 如果总天数大于50天,则设置为“第五天” 我认为最后一部分很简单,但我无法得到总天数的解决方案并进行比较 有这样的函数吗 <td><div *ngIf="todo.anyDate>-dateNow()>50">fiffty</div> </td> fifty 感谢您在不使用momentjs的情况下提供帮助,您必须在组件中定义一个函数: public inBetween(date1, d

您好,我想将一天与当前日期进行比较,得到总天数

如果总天数大于50天,则设置为“第五天”

我认为最后一部分很简单,但我无法得到总天数的解决方案并进行比较

有这样的函数吗

<td><div *ngIf="todo.anyDate>-dateNow()>50">fiffty</div> </td>
fifty

感谢您在不使用momentjs的情况下提供帮助,您必须在组件中定义一个函数:

public inBetween(date1, date2 ) {
  //Get 1 day in milliseconds
  var one_day=1000*60*60*24;

  // Convert both dates to milliseconds
  var date1_ms = date1.getTime();
  var date2_ms = date2.getTime();

  // Calculate the difference in milliseconds
  var difference_ms = date2_ms - date1_ms;

  // Convert back to days and return
  return Math.round(difference_ms/one_day); 
}


然后,在*ngi中,如果要在中间执行
(anyDate,new Date())

您应该在组件类中定义一个函数:

getDiferenceInDays(theDate : Date) : number {
    return Math.abs(date.getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24) ;
}
然后在模板中使用:

<td>
    <div *ngIf="getDiferenceInDays(todo.anyDate) > 50">fiffty</div>
</td>

第五

请注意,use不能使用模板内的new表达式,因此您必须将new Date()移动到函数部分

听起来像是管道的工作!就像Andrea说的,你可以利用momentJS。真是太棒了

我编写了一个简单的管道函数,它将返回2个日期之间的差异

import { Pipe, PipeTransform } from '@angular/core';
import moment from 'moment'

@Pipe({
  name: 'datediff'
})
export class DatediffPipe implements PipeTransform {

  transform(date1: any, date2?: any): any {
    const daydiff = moment(date1).diff(moment(date2), "days");
    return Math.abs(daydiff);
  }
}
例如:

更新:

或者,如果您需要跟踪应用程序中超过50个日期的数量,管道可能不是完成此任务的最佳工具,因为您需要在本地组件中存储状态

一种可能的解决方案是在组件类中重用与方法相同的函数


是的,使用
*ng if
指令,您可以创建一个方法,在组件中执行计算示例
dateDiff
,然后在html中调用它,如下所示:

<div *ng-if="dateDiff(todo.anyDate) > 50">fiffty</div>
fifty
请在此演示中查看:

函数AppComponent(){
this.todo={};
this.todo.anyDate=新日期('2018-01-08');
this.dateDiff=函数(日期){
console.log(new Date()-this.todo.anyDate);
返回新日期()-this.todo.anyDate;
}
}
AppComponent.annotations=[
新的angular.ComponentAnnotation({
选择器:“我的应用程序”
}),
新的angular.ViewAnnotation({
模板:“Fifty”,
指令:[angular.NgFor,angular.NgIf]
})
];
document.addEventListener('DOMContentLoaded',function(){
角度引导(AppComponent);
});


我会用momentjs哇,非常感谢!这是一个非常快速的回答。好啊我有。是否有一个解决方案来计算这个“五分之一”,并把它带到一个警报框有{{count(fifty)}}fifty。hmm您想计算超过50的结果数吗?如果是这种情况,那么管道可能不是最好的解决方案,最好将其用于纯函数逻辑而不保持状态。我会考虑把你的日期数据,把它们放进一个集合中,然后通过它们循环。例如,您可以使用上述函数并将其映射到日期对集合。我从上面更新了我的答案。
<div *ng-if="dateDiff(todo.anyDate) > 50">fiffty</div>