2017-03-03 77 views
2

我有一個在AngularJS中製作的日曆應用程序,可以從三個不同的API端點獲取數據。我在使用ng-show將數據端點的日期範圍與JavaScript生成的日期進行比較時遇到問題。Angularjs使用ng-show條件來比較兩種不同的日期格式

這是代碼:

<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年3月9日的日期格式(作爲一個例子)

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'") 第一個條件成功地計算,只有日期沒有按」 t應該評估。

This is the end result.信息正確地綁定到日曆上的每個人,剩下的唯一問題是單元中的信息沒有與日曆上的日期進行比較,因此爲什麼預訂出現在該人的每個單元上該列。

希望我已經提供了足夠的信息來理解我正在嘗試做的事情。任何幫助或建議表示讚賞。

+1

你爲什麼不只是做一個函數,它的日期,使他們以同樣的格式,並返回它們是否相等或不?而不是在HTML中造成如此混亂,試圖應用管道,而不是。 – yBrodsky

回答

0

你想比較一個字符串和一個日期對象,這就是爲什麼第二個條件總是失敗的原因。格式化日期date | date 'yyyy-MM-dd'不會更改數據類型。這只是爲了顯示目的。同樣比較兩個日期是否相等也是非常棘手的,因爲即使日期相同,兩個日期對象也是完全不同的。這是解決這個問題的一種方法。

<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