如何将天数添加到 angularjs 中现有的 ng-module 日期?
How to add number of days to existing ng-module date in angularjs?
大家好,我是 angularjs 的新手,实际上我正在尝试将一个 ng-module
值添加到 angularjs 中的另一个 ng-moudule date input
...
例如:- 17-08-2016 添加 20 Result Expecting 03-09-2016。
my plunk
我不知道我在哪里做错了以及如何得到解决方案,请知道答案的人帮助我,同样感谢。
我的控制器
$scope.name = {
"_id": "57ac1b6d82e1c5940ac3c730",
"user": {
"_id": "57400c32bd07906c1308e2cf",
"displayName": "mani selvam"
},
"__v": 0,
"terms": "20",
"invoice_date": "2016-08-17",
"due_date": ""
};
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(terms));
return this;
};
我的Html:-
<tr ng-repeat="mani in name"> </tr>
<td >{{name.invoice_date | date:'dd-MM-yyyy'}}</td>
<td >{{name.terms }}</td>
<td >{{name.invoice_date | date:'dd-MM-yyyy'}} + {{name.terms }}</td>
您可以通过这样做来修复它:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = {
"_id": "57ac1b6d82e1c5940ac3c730",
"user": {
"_id": "57400c32bd07906c1308e2cf",
"displayName": "mani selvam"
},
"__v": 0,
"terms": "20",
"invoice_date": "2016-08-17",
"due_date": ""
};
$scope.addDays = function(stringDate,days) {
var date = new Date(stringDate);
date.setDate(date.getDate() + parseInt(days));
return date;
}
});
然后在您的模板中执行:
<td >{{addDays(name.invoice_date,name.terms) | date:'dd-MM-yyyy'}}</td>
为什么这样的事情在你的例子中不起作用的原因:
<td >{{(name.invoice_date | date:'dd-MM-yyyy').addDays({{name.terms}})}} + {{name.terms }}</td>
是因为 angular 日期过滤器 returns 是字符串表示形式,因此未链接到日期原型
理论上,如果您的 name.invoice_date 是日期对象而不是 json 中的字符串,那么这可能会起作用。
从 angular 过滤器源代码
中查看
@param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
* number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
* shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
* specified in the string input, the time is considered to be in the local timezone.
所以如果这是一个开始的日期,你可以这样做:
<td >{{(name.invoice_date).addDays({{name.terms}}) | date:'dd-MM-yyyy'}} + {{name.terms }}</td>
大家好,我是 angularjs 的新手,实际上我正在尝试将一个 ng-module
值添加到 angularjs 中的另一个 ng-moudule date input
...
例如:- 17-08-2016 添加 20 Result Expecting 03-09-2016。
my plunk
我不知道我在哪里做错了以及如何得到解决方案,请知道答案的人帮助我,同样感谢。
我的控制器
$scope.name = {
"_id": "57ac1b6d82e1c5940ac3c730",
"user": {
"_id": "57400c32bd07906c1308e2cf",
"displayName": "mani selvam"
},
"__v": 0,
"terms": "20",
"invoice_date": "2016-08-17",
"due_date": ""
};
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(terms));
return this;
};
我的Html:-
<tr ng-repeat="mani in name"> </tr>
<td >{{name.invoice_date | date:'dd-MM-yyyy'}}</td>
<td >{{name.terms }}</td>
<td >{{name.invoice_date | date:'dd-MM-yyyy'}} + {{name.terms }}</td>
您可以通过这样做来修复它:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = {
"_id": "57ac1b6d82e1c5940ac3c730",
"user": {
"_id": "57400c32bd07906c1308e2cf",
"displayName": "mani selvam"
},
"__v": 0,
"terms": "20",
"invoice_date": "2016-08-17",
"due_date": ""
};
$scope.addDays = function(stringDate,days) {
var date = new Date(stringDate);
date.setDate(date.getDate() + parseInt(days));
return date;
}
});
然后在您的模板中执行:
<td >{{addDays(name.invoice_date,name.terms) | date:'dd-MM-yyyy'}}</td>
为什么这样的事情在你的例子中不起作用的原因:
<td >{{(name.invoice_date | date:'dd-MM-yyyy').addDays({{name.terms}})}} + {{name.terms }}</td>
是因为 angular 日期过滤器 returns 是字符串表示形式,因此未链接到日期原型
理论上,如果您的 name.invoice_date 是日期对象而不是 json 中的字符串,那么这可能会起作用。 从 angular 过滤器源代码
中查看@param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
* number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
* shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
* specified in the string input, the time is considered to be in the local timezone.
所以如果这是一个开始的日期,你可以这样做:
<td >{{(name.invoice_date).addDays({{name.terms}}) | date:'dd-MM-yyyy'}} + {{name.terms }}</td>