【问题标题】:How to add number of days to existing ng-module date in angularjs?如何在angularjs中为现有的ng-module日期添加天数?
【发布时间】:2016-12-18 02:47:19
【问题描述】:

大家好,我是 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>

【问题讨论】:

  • 我看不到你在哪里使用addDays。我可以看到您定义了它但从未使用过。您的意思是要在最后一列中添加天数?
  • 嗨 mosh feu 感谢您的评论,您能否提供如何在 HTML 中使用 addDays 的解决方案以及通过 in plunker 提供解决方案的更好方法.....请建议我们使用的控制器功能是否完善......请帮助我......
  • @ Mosh Feu :- 我在上面提到了预期的结果,请在 plunker 中提供解决方案....提前感谢您的回答...
  • 似乎@Armo 回答了一个很好的答案。不是吗?
  • @Mosh Feu ...感谢您的宝贵意见,我在 Arno 先生的帮助下得到了答案.....

标签: html css angularjs meanjs


【解决方案1】:

您可以通过以下方式修复它:

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>

是因为角度日期过滤器返回一个字符串表示,因此没有链接到日期原型

理论上,如果您的 name.invoice_date 是日期对象而不是 json 中的字符串,这可能会起作用。 从角度过滤器源码看一下这个

@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>

【讨论】:

  • Arno_Geismar 非常感谢你,伙计....它工作得很好....
  • 嗨,Arno_Geismar 先生...当我实现您的代码时,我遇到了这样的错误:-Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! Watchers fired in the last 5 iterations: [["fn: ngModelWatch; newVal: \"2016-08-22T00:00:00.000Z\"; oldVal: \"2016-08-22T00:00:00.000Z\""], 所以如果您的解决方案请帮助我们......谢谢......
  • 然后我像这样使用 ng-bind:- ng-bind="due_date=addDays(sryarndebitnote.invoice_date,sryarndebitnote.terms) | date:'dd-MM-yyyy'"...i这里的问题是发现的问题。它显示的输出如下:- Mon Aug 22 2016 05:30:00 GMT+0530 (IST) 所以请告诉我们解决方案...
  • 嗨@Arno ...你知道给定错误的解决方案吗?
  • 您好,当您的代码在 Angular 的摘要循环运行时更改日期值时,您会遇到错误。 Angular 对所有观察者进行 2 次循环(脏检查),以确保没有任何变化并且需要更新视图。当您在此阶段更改某些内容时,它会再次运行,直到最后 10 次尝试的角度给出此错误。我不知道如何解决这个问题,因为它含糊不清并且取决于您的代码。但是某些东西正在不断更新导致此错误的日期值的模型
猜你喜欢
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多