Angularjs使用ng-show条件来比较两种不同的日期格式

时间:2017-03-03 19:00:36

标签: javascript angularjs date datetime

我在AngularJS中创建了一个日历应用程序,它从三个不同的API端点提取数据。我在使用ng-show将数据端点的日期范围与Javascript生成日期进行比较时遇到问题。

这是代码:

<tr ng-repeat="date in futureDates">
   <td> {$ date | date : 'yyyy-MM-dd' $} </td>
    <td ng-repeat="users in calendar_users track by $index" 
        ng-show="users.fields.team_name == team.pk">
       <span ng-repeat="activities in calendar_activities track by $index" 
             ng-show="activities.fields.user == users.fields.username && 
                      activities.fields.date == date | date 'yyyy-MM-dd'">
             {$activities.fields.activity$}
             {$activities.fields.date | date $}
       </span>
    </td>
</tr>

第一个<td>代码列出了30天的日期,第二个<td>代码使用内部的<span>来比较值并查看它们是否匹配。

对于这行代码:

<span ng-repeat="activities in calendar_activities track by $index" 
      ng-show="activities.fields.user == users.fields.username && 
              activities.fields.date == date | date 'yyyy-MM-dd'">

在代码的ng-show部分,&&之前的第一个条件  正确评估,但在&&条件没有正确评估之后。

activities.fields.date的日期格式为2017-03-09(作为示例)

date | date 'yyyy-MM-dd'">是由Javascript自动生成的日期列表。该日期采用时间戳格式,因此我尝试使用代码| date 'yyyy-MM-dd'的以下部分进行格式化,以便将其格式化为与我相同的日期进行比较至。

This is how the calendar looks like

两个条件都评估为真,所有结果都打印出来。

如果以下代码行:

<span ng-repeat="activities in calendar_activities track by $index" 
      ng-show="activities.fields.user == users.fields.username && 
              activities.fields.date == date | date 'yyyy-MM-dd'">` 

变为:

 <span ng-repeat="activities in calendar_activities track by $index" 
       ng-show="activities.fields.user == users.fields.username">`

(注意:我已删除&& activities.fields.date == date | date 'yyyy-MM-dd'") 第一个条件成功评估,只有日期没有按预期进行评估。

This is the end result.信息正确地与日历上的每个人联系在一起,唯一的问题是单元格中的信息没有与日历上的日期进行比较,因此为什么预订会出现在每个单元格上专栏中的那个人。

希望我已经提供了足够的信息来理解我尝试做的事情的背景。任何帮助或建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

您正在尝试比较字符串和日期对象,这就是第二个条件总是失败的原因。格式化日期date | date 'yyyy-MM-dd'不会更改数据类型。这只是为了显示目的。同时比较它们是否相等的两个日期总是很棘手,因为即使它们具有相同的日期,2个日期对象也完全不同。这是解决此问题的一种方法。

<span ng-repeat="activities in calendar_activities track by $index" 
  ng-show="activities.fields.user == users.fields.username && 
          compareDate(activities.field.date)">

在控制器中

$scope.compareDate = function(fieldDateStr){
var fieldDate= new Date(fieldDateStr);

if(fieldDate.getDate() == $scope.date.getDate() && 
fieldDate.getMonth() == $scope.date.getMonth() && 
fieldDate.getYear() == $scope.date.getYear()){
    return true;
}
else{
    return false;
}

        };

比较2个日期的更详细说明here