AngularJS:将日期与ng-repeat中的当前日期进行比较

时间:2018-07-12 07:20:04

标签: angularjs

如果日期小于当前日期或等于或大于当前日期,我需要分离数据。日期不应包含时间。 我的代码是

<div ng-app ng-controller="Ctrl">
    <div ng-repeat="val in x">
    {{val.dt}}
    <div ng-if="date > val.dt ">Past</div>
    <div ng-if="date < val.dt">Future</div>
    <div ng-if="date = val.dt ">Present</div>
    </div>

</div>

而angularjs控制器是

$scope.date = new Date();
$scope.x = [{dt:"2018-07-12"},{dt:"2018-07-14"},{dt:"2018-07-10"}];

但是它没有按照我的意愿工作。它给我输出

2018-07-12
Past
Future
Present
2018-07-14
Past
Future
Present
2018-07-10
Past
Future
Present

但是如果当前日期是2018-07-12,我想输出

2018-07-12
Present
2018-07-14
Future
2018-07-10
Past

请让我知道我错了。

2 个答案:

答案 0 :(得分:0)

好吧,问题在于您正在将日期与字符串进行比较。

您的date变量是Date类型,而您的x数组数据是String。

为简单起见,仅当您的格式为YYYY-MM-DD时,我建议您将date var格式化为文本:

var d= new Date();
$scope.date = d.getFullYear() + '-' + ("0" + (d.getMonth() + 1)).slice(-2) + "-" + ("0" + d.getDate()).slice(-2)
$scope.x = [{dt:"2018-07-12"},{dt:"2018-07-14"},{dt:"2018-07-10"}];

在angular 1.0.x中:

<div ng-app ng-controller="Ctrl">
<div ng-repeat="val in x">
{{val.dt}}

  <div ng-show="date > val.dt">
   - Past
  </div>
  <div ng-show="date < val.dt">
   - Future
  </div>
  <div ng-show="date == val.dt">
   - Present
  </div>
</div>

答案 1 :(得分:0)

您可以尝试:

<div ng-app ng-controller="Ctrl">
   <div ng-repeat="val in x">
      {{val.dt}}
      <div ng-if="date.getTime() > getTimestamp(val.dt)">Past</div>
      <div ng-if="date.getTime() < getTimestamp(val.dt)">Future</div>
      <div ng-if="date.getTime() == getTimestamp(val.dt)">Present</div>
   </div>
</div>

AngularJs:

$scope.getTimestamp = function(dateTime) {
   return new Date(dateTime).getTime();
}