如何减去两个angularjs日期变量

我对angularjs相当新,但在这里它。 我可以通过dj dd/mm/yyyyforms的angularjs两个日期,但我需要做的是以某种方式减去两个日期以获得两者之间的天数差异。 我创建了一个jquery函数来执行此操作,但我不知道如何将两个日期传递给函数。 所以我想知道是否有不同的方法可以解决这个问题?

我正在尝试根据两个日期之间的天数来设置触发系统,以便对某些事物进行风格化。 例如,如果它在10天内,我希望它使用样式1 ,如果它在20天内使用样式2 ,依此类推。

我也是一个angularjs新手但你不会通过你的javascript视图模型提供属性来处理这个问题吗?

例如,有一个样式字段根据日期字段更改(即样式返回样式1,如果差异为10天),并希望通过angularjs绑定更新将传播到屏幕。

我认为正确的术语是计算属性计算属性

编辑

不确定这是否是你正在寻找的但是看小提琴,例如计算日期差异并根据视图模型的属性更改样式(范围)

scope.diffscope.col是要绑定的2个属性

http://jsfiddle.net/chrismoutray/wfjv6/

HTML

  
first date second date difference {{diff}}
when the difference is greater than 10 color changes to green
eg set the second date to 15/01/2013
State

JS

 function ComputedPropertiesCtrl() { var scope = this; scope.firstdate = '01/01/2013'; scope.seconddate = '10/01/2013'; scope.data_before = []; scope.differenceInDays = function() { var dt1 = scope.firstdate.split('/'), dt2 = scope.seconddate.split('/'), one = new Date(dt1[2], dt1[1]-1, dt1[0]), two = new Date(dt2[2], dt2[1]-1, dt2[0]); var millisecondsPerDay = 1000 * 60 * 60 * 24; var millisBetween = two.getTime() - one.getTime(); var days = millisBetween / millisecondsPerDay; return Math.floor(days); }; scope.color = function() { return (scope.differenceInDays() > 10) ? 'green' : 'red'; }; scope.$watch('[firstdate, seconddate]', function(currScope,newVal,oldVal) { scope.data_before = oldVal; scope.diff = scope.differenceInDays(); }); scope.$watch('[firstdate, seconddate]', function(currScope,newVal,oldVal) { scope.data_before = oldVal; scope.col = scope.color(); }); } 

CSS

 h2 { position: fixed; right: 10px; top: 10px; color: red; background:white;z-index:1000; } input { width: 100px; } div { margin: 10px; padding: 10px; } 

基本的javascript方式:

 var d1 = new Date('01/16/2013'); var d2 = new Date('02/26/2013'); var milliseconds = d2-d1; var seconds = milliseconds / 1000; var minutes = seconds / 60; var hours = minutes / 60; var days = hours / 24; 

使用其中一个Date库(例如moment.js):

 var d1 = moment("01/16/2013"); var d2 = moment("02/26/2013"); var days = moment.duration(d2.diff(d1)).asDays(); 

您只需将日期转换为时间戳然后减去。

 var Date1 = 08/16/2004; var Date2= 10/24/2005; var timestamp1 = new Date(Date1).getTime(); var timestamp2 = new Date(Date2).getTime(); var diff = timestamp1 - timestamp2 var newDate = new Date (diff); 

您可以使用角度矩来计算差异,使用amDifference滤镜:

获取两个日期之间的差异(以毫秒为单位)。 参数是日期,单位和usePrecision。 日期默认为当前日期。 例:

 Difference: {{ dateFrom | amDifference : dateTo : 'days' }} days 

这是有效的,这里有2个完美的javascript日期函数,你永远不应该没有…

 // Returns the days between a & b date objects... function dateDiffInDays(a, b) { var _MS_PER_DAY = 1000 * 60 * 60 * 24; // Discard the time and time-zone information. var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); return Math.floor((utc2 - utc1) / _MS_PER_DAY); } // Calculate how many days between now and an event... function daysTill(e) { var eventE = new Date(e); var today = new Date(); return dateDiffInDays(today, eventE); } 

JavaScript JavaScript库非常有用且易于使用:


 var parsedServerOutTime = moment(serverOutTime, "HH:mm:ss"); var parsedServerInTime = moment(serverInTime, "HH:mm:ss"); var milliseconds= parsedServerOutTime.diff(parsedServerInTime) //default milliseconds var days = moment.duration(parsedServerOutTime .diff(parsedServerInTime )).asDays();// For days 

asWeeks(); asMonths(); asYears(); 等等更多细节请查看http://momentjs.com/docs/

我尝试了下面的一个,它为我解决了

 var selecteddate = new Date($rootscope.selectvalue); $scope.firstDate = selecteddate .getTime(); $scope.SecondDate = new Date().getTime(); 

选定日期是从日历中选择的日期,它来自父作用域。 第二个日期将是今天的日期。 后来我会发现使用时差的区别。

 var differenceinDays=parseInt( moment.duration( moment($scope.firstDate).diff( moment($scope.SecondDate) ) ).asDays() ); 

我正在使用parseInt,因为我只想返回整数值

希望这有效