我正在使用角度矩库。出于某种原因,当使用amTimeAgo
时,它会将超过25天的任何事情视为一个月。
在这个例子中,我使用片刻JS来计算当前时间25,26,27天。然后使用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>
&#13;
{{1}}&#13;
Plnkr中的相同示例 - http://plnkr.co/edit/DZqqI5BC2XNrITThLCS7?p=preview
是否有我可以设置的配置,因此它计算为每月30天?或者是这个错误?我正在查看他们的文档和来源,我似乎无法找到将此更改为30天的位置。
谢谢!
答案 0 :(得分: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
故意< / em>近似。
如果您只想要确切的天数,则可以使用diff
函数代替fromNow
函数。