2016-12-29 6 views
0

私は角モーメントライブラリで作業しています。なんらかの理由で、amTimeAgoを使用している場合、25日以上のものを1か月間扱います。amTimeAgoフィルター月を間違って計算する

この例では、現在の時刻から25,26,27日後にカウントするためにmoment JSを使用しています。次に、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日の期間が1ヶ月と見なされます。 This is described here

相対時間のしきい値を設定することにより、これらの設定を必要に応じてカスタマイズすることができます。as described here。例えば

、あなたが呼びたい、あなたは28日に1カ月のしきい値を増加したいと言う:

moment.relativeTimeThreshold('d', 28); 

用語「ヶ月」で正確に定義するのは比較的困難であることに注意してください最初の場所(毎月異なる日数があるため)、またfromNowであり、意図的にです。

代わりに、正確な日数を求めたい場合は、fromNow関数の代わりにdiff関数を使用します。

+0

ありがとうございました。私は間違った場所(角の瞬間)を間違いなく見ていましたが、これはむしろ瞬間からの継承された設定です.js自体。このフィルタを使用する場合は、フォーマットの提案も念頭に置いておきます。再度、感謝します。 – devtye

関連する問題