Como subtrair duas variables ​​de data angularjs

Eu sou relativamente novo no angularjs, mas aqui vai. Eu sou capaz de duas datas através de angularjs na forma dd/mm/yyyy , mas o que eu preciso fazer é de alguma forma subtrair as duas datas para obter a diferença em dias entre os dois. Eu criei uma function jquery para fazer isso, mas não sei como passar as duas datas para a function. Então eu estava me perguntando se havia uma maneira diferente de fazer isso?

Eu estou tentando configurar um sistema de gatilho dependendo do número de dias entre as duas datas para que certas coisas sejam estilizadas. Por exemplo, se estiver dentro de 10 dias, quero que use o estilo 1 e, se dentro de 20 dias, usar o estilo 2 e assim por diante.

Eu também sou um novato angularjs, mas você não iria lidar com isso, tornando as propriedades disponíveis através do seu modelo de exibição de javascript?

Por exemplo, tem um campo de estilo que muda com base nos campos de data (isto é, o estilo retorna o estilo 1 quando a diferença é de 10 dias) e, esperançosamente, através da binding angularjs, as atualizações serão propagadas para a canvas.

Eu acho que o termo certo para isso é uma propriedade calculada ou propriedade calculada

EDITAR

Não tenho certeza se é isso que você está procurando, mas veja o violino, por exemplo, de calcular a diferença de data e alterar um estilo baseado em todas as propriedades do modelo de exibição (escopo)

scope.diff e scope.col são as duas propriedades para vincular

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; } 

Forma básica de 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; 

Usando uma das bibliotecas de datas (como moment.js):

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

você simplesmente converte data em timestamp e depois subtrai.

 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); 

Você pode usar o momento angular para calcular a diferença, usando o filtro amDifference :

Obtenha a diferença entre duas datas em milissegundos. parameters são data, unidades e usePrecision. Data padrão para data atual. Exemplo:

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

Isso funciona, e aqui estão 2 funções de data javascript impecáveis ​​que você nunca deve ficar sem …

 // 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); } 

O momento em que a biblioteca JavaScript é realmente muito útil e fácil de usar:


 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(); etc etc para mais detalhes, consulte http://momentjs.com/docs/

Eu tentei o abaixo e funcionou para mim

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

A data selecionada é aquela que é selecionada no calendar e é proveniente do escopo pai. segunda data será a data de hoje. mais tarde eu vou encontrar a diferença usando diff momento.

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

Estou usando parseInt porque quero retornar apenas o valor inteiro

Espero que isso funcione