2016-12-29 3 views
0

Я работаю с библиотекой с угловым моментом. По какой-то причине он обрабатывает что-либо более 25 дней в месяц при использовании amTimeAgo.amTimeAgo Filter Вычислить месяцы неправильно

В этом примере я использую момент JS для обратного отсчета 25, 26, 27 дней с текущего времени. Затем используйте amTimeAgo для вычисления продолжительности с этого момента.

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>

же пример в Plnkr - http://plnkr.co/edit/DZqqI5BC2XNrITThLCS7?p=preview

Есть ли конфигурация, которую я могу установить, так что рассчитывать на 30 дней в месяц? или это ошибка? Я просматриваю их документы и источник, я не могу найти, где изменить это на 30 дней.

Спасибо!

ответ

0

У вас есть большая проблема. Вы заметите, что ваш код генерирует следующее предупреждение в этом фрагменте и в консоли отладки в вашем примере Plunker.

Предупреждение об устаревании: предоставленное значение не соответствует признанному формату ISO. момент возвращается к js Date(), что не является надежным во всех браузерах и версиях. Форматы форматов, отличных от ISO, обескуражены и будут удалены в ближайшем главном выпуске. Пожалуйста, обратитесь к http://momentjs.com/guides/#/warnings/js-date/ для получения дополнительной информации.

Все, что вы передаете в качестве входных данных для amTimeAgo фильтра собирается стать аргументом функции moment(...) фабрики. Следовательно, вы не должны форматировать его в определенном для локали формате.

Просто удалите .format('MM/DD/YYYY hh:mm A') с полей daysXXFromNow и он отобразит правильно, так как он пройдет moment объект, что вполне приемлемо.

Чтобы ответить на заданный вами вопрос, вы видите правильное поведение, так как есть относительные пороговые значения для рассмотрения. По умолчанию период от 26 до 45 дней считается месяцем. This is described here.

Вы можете настроить эти настройки по желанию, установив относительные пороговые значения времени, as described here.

Например, скажем, вы хотите увеличить порог один месяц до 28 дней, вы бы назвали:

moment.relativeTimeThreshold('d', 28); 

Имейте в виду, что термин «месяцы» довольно трудно определить с точностью первое место (поскольку каждый месяц имеет другое количество дней), а также то, что fromNowнамеренно приблизительный.

Если вместо этого вы просто хотели точно указать количество дней, вы должны использовать функцию diff вместо функции fromNow.

+0

Большое вам спасибо. Я определенно смотрел на неправильное место (угловой момент), но это скорее унаследованная настройка от самого момента .js. Я также буду учитывать ваше предположение о форматировании при использовании этого фильтра. Еще раз спасибо. – devtye

Смежные вопросы