Em JavaScript, as datas podem ser transformadas no número de milissegundos desde a epoc chamando o getTime()
método ou apenas usando a data em uma expressão numérica.
Portanto, para obter a diferença, basta subtrair as duas datas.
Para criar uma nova data com base na diferença, basta passar o número de milissegundos no construtor.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Isso deve funcionar
EDIT : Bug corrigido apontado por @bdukes
EDITAR :
Para obter uma explicação do comportamento, oldBegin
, oldEnd
, e newBegin
são Date
exemplos. Chamar operadores +
e -
irá acionar a conversão automática de Javascript e chamará automaticamente o valueOf()
método de protótipo desses objetos. Acontece que o valueOf()
método é implementado no Date
objeto como uma chamada para getTime()
.
Então, basicamente: date.getTime() === date.valueOf() === (0 + date) === (+date)
Date
objetos? É difícil dizer que tipo de objeto eles deveriam ser, uma vez que a declaração da variável foi omitida aqui.JavaScript suporta perfeitamente a diferença de data fora da caixa
Agora, algumas armadilhas. Experimente isto:
Portanto, se você corre o risco de adicionar um número e uma data, converta a data para
number
diretamente.Meu primeiro exemplo demonstra o poder do objeto Date, mas na verdade parece ser uma bomba-relógio
fonte
-
força os argumentos para número, portanto, a Data retorna seu valor de tempo. O+
operador está sobrecarregado, então pode fazer adição, coerção para número ou concatenação. Visto que as datas obrigam a String neste caso,+
faz a concatenação. A confusão não é culpa do objeto Date, mas da sobrecarga dos operadores.Veja JsFiddle DEMO
para o seu código HTML:
fonte
Se você não se preocupa com o componente de tempo, você pode usar
.getDate()
e.setDate()
apenas para definir a parte da data.Portanto, para definir a data de término para 2 semanas após a data de início, faça algo assim:
Para retornar a diferença (em dias) entre duas datas, faça o seguinte:
Por fim, vamos modificar a primeira função para que possa tomar o valor retornado por 2nd como parâmetro:
fonte
GetDateDiff()
quebrará as barreiras do mês. Por exemplo, 2011/04/26 e 2011/05/01 retornarão -25, mas o deslocamento deve ser de 5 dias.Obrigado @ Vincent Robert , acabei usando seu exemplo básico, embora seja na verdade
newBegin + oldEnd - oldBegin
. Esta é a solução final simplificada:fonte
getTime
e às vezes nãoDependendo de suas necessidades, esta função irá calcular a diferença entre os 2 dias e retornar um resultado em dias decimais.
fonte
Math.abs()
chamada e você sempre obterá uma casa decimal positiva.date.getTime()
para obter o tempo no futuro / passado. `var nextMinute = new Date (someDate.getTime () + 60 * 1000);Se estiver usando o moment.js, existe uma solução mais simples, que lhe dará a diferença em dias em uma única linha de código.
Detalhes adicionais podem ser encontrados na página moment.js
Saúde Miguel
fonte
fonte
código estendido de modificação alternativa.
http://jsfiddle.net/vvGPQ/48/
fonte
fonte
fonte
este código preenche a duração dos anos de estudo quando você insere a data de início e de término (qualificar data acurada) do estudo e verifica se a duração é inferior a um ano se sim o alerta que uma mensagem leva em mente há três elementos de entrada o primeiro
txtFromQualifDate
e segundotxtQualifDate
e terceirotxtStudyYears
vai mostrar o resultado do número de anos com fração
fonte
getFullYear
que foi projetado para isso. ------- Veja a biblioteca datejs em googlecode, que possivelmente suporta a maioria dos casos esquivosSe você usar objetos Date e depois usar o
getTime()
função para ambas as datas, ela fornecerá seus respectivos tempos desde 1º de janeiro de 1970 em um valor numérico. Você pode obter a diferença entre esses números.Se isso não ajudar você, verifique a documentação completa: http://www.w3schools.com/jsref/jsref_obj_date.asp
fonte
O código abaixo retornará os dias restantes de hoje para a data futura.
Dependências: jQuery e MomentJs.
fonte
fonte
ISSO É O QUE EU FIZ NO MEU SISTEMA.
fonte