0

我正在使用角矩库。出于某种原因,它在使用amTimeAgo.

在这个例子中,我使用 moment 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 天的位置。

谢谢!

4

1 回答 1

0

你有更大的担忧。您会注意到您的代码在此处的代码段中以及您的 Plunker 示例的调试控制台中生成了以下警告。

弃用警告:提供的值不是可识别的 ISO 格式。moment 构造回退到 js Date(),这在所有浏览器和版本中并不可靠。不鼓励使用非 ISO 日期格式,并将在即将发布的主要版本中删除。请参阅http://momentjs.com/guides/#/warnings/js-date/了解更多信息。

无论您作为输入传递给amTimeAgo过滤器的任何内容都将成为moment(...)工厂函数的参数。因此,您不应使用特定于语言环境的格式对其进行格式化。

只需.format('MM/DD/YYYY hh:mm A')从您的daysXXFromNow字段中删除它,它就会正确呈现,因为它将传递一个moment对象,这是完全可以接受的。

要回答您提出的问题,您会看到正确的行为,因为需要考虑相对阈值。默认情况下,将 26 到 45 天的时间段视为一个月。 这在此处进行了描述

您可以根据需要自定义这些设置,方法是设置相对时间阈值,如此处所述

例如,假设您想将 1 个月的阈值增加到 28 天,您可以调用:

moment.relativeTimeThreshold('d', 28);

请记住,术语“月”首先是相对难以精确定义的(因为每个月都有不同的天数),而且fromNow故意近似的。

相反,如果您只是想要确切的天数,则可以使用该diff函数而不是该fromNow函数。

于 2016-12-29T01:33:28.157 回答