2016-12-29 93 views
0

我正在使用角矩庫。出於某種原因,在使用amTimeAgo時,它將超過25天的任何內容視爲一個月。amTimeAgo過濾器計算月份錯誤

在這個例子中,我使用JS的時間來計算當前時間25,26,27天。然後使用amTimeAgo來計算從現在開始的持續時間。

在Plnkr

angular.module('timeApp', ['angularMoment']) 
 
.controller('mainController', [ '$scope', function($scope) { 
 
    
 
    $scope.today = new Date(); 
 
    $scope.parsedToday = moment($scope.today).format('MM/DD/YYYY hh:mm A'); 
 
    $scope.days25FromNow = moment($scope.today).subtract({days: 25}).format('MM/DD/YYYY hh:mm A'); 
 
    $scope.days26FromNow = moment($scope.today).subtract({days: 26}).format('MM/DD/YYYY hh:mm A'); 
 
    $scope.days27FromNow = moment($scope.today).subtract({days: 27}).format('MM/DD/YYYY hh:mm A'); 
 
    
 
}]);
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.min.js"></script> 
 
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment.min.js"></script> 
 
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.0/angular-moment.min.js"></script> 
 

 
    <link rel="stylesheet" href="style.css" /> 
 
    <script src="script.js"></script> 
 
    </head> 
 
    
 
    <body> 
 
    <div class="container" ng-app="timeApp" ng-controller="mainController as main"> 
 

 
     <div> 
 
     <h2>AmTimeAgo Error in Over 25 days</h2> 
 
     <h3>The Time is {{ parsedToday}}</h3> 
 
     
 
     <p>25 Days From Now - {{days25FromNow}} <br> 
 
      Original AM Time Ago - {{days25FromNow | amTimeAgo}} <br> 
 
      Expect - 25 days ago 
 
     </p> 
 

 
     <p>26 Days From Now - {{days26FromNow}} <br> 
 
      Original AM Time Ago - {{days26FromNow | amTimeAgo}}<br> 
 
      Expect - 26 days ago 
 
     </p> 
 
     
 
     <p>27 Days From Now - {{days27FromNow}} <br> 
 
      Original AM Time Ago - {{days27FromNow | amTimeAgo}}<br> 
 
      Expect - 27 days ago 
 
     </p>   
 
     </div> 
 
     
 
     
 
    </div> 
 
    </body> 
 

 
</html>

同樣的例子 - http://plnkr.co/edit/DZqqI5BC2XNrITThLCS7?p=preview

有沒有辦法,我可以設置所以它計算30天爲一個月的配置?或者是這個錯誤?我正在審閱他們的文檔和來源,我似乎無法找到將其更改爲30天的地方。

謝謝!

回答

0

您有更大的關注。您會注意到您的代碼在這裏的代碼片段中生成以下警告,並在您的Plunker示例的調試控制檯中生成以下警告。

棄用警告:提供的值不是採用可識別的ISO格式。時刻構造會回落到js Date(),這在所有瀏覽器和版本中都不可靠。非ISO日期格式不鼓勵,並將在即將發佈的主要版本中刪除。有關更多信息,請參閱http://momentjs.com/guides/#/warnings/js-date/

無論你是路過作爲輸入amTimeAgo過濾器將成爲一個爭論的moment(...)工廠函數。因此,您不應該使用特定於語言環境的格式進行格式設置。

只需移除您daysXXFromNow字段.format('MM/DD/YYYY hh:mm A')並且它將正確呈現的,因爲它會通過在一個moment對象,這是完全可以接受的。

要回答您提出的問題,您會看到正確的行爲,因爲要考慮相對閾值。默認情況下,26到45天的時間被視爲一個月。 This is described here

您可以根據需要自定義這些設置,方法是設置相對時間閾值as described here

例如,假設你想增加一個月的門檻至28天,你會打電話:

moment.relativeTimeThreshold('d', 28); 

記住的是,「月」一詞是比較難以精確的定義第一名(因爲每個月都有不同的天數),並且還認爲fromNow故意地近似值。

如果您只想要精確的天數,您可以使用diff函數而不是fromNow函數。

+0

非常感謝。我肯定是在看錯地方(角度矩),但這是來自moment.js本身的繼承設置。使用此過濾器時,我還會記住您的格式化建議。再次感謝。 – devtye