Como consigo o número de dias entre duas datas em JavaScript? Por exemplo, dadas duas datas em caixas de entrada:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
Aqui está uma implementação rápida e suja**, como prova de conceito para resolver o problema, tal como apresentado na pergunta. Ela se baseia no fato de que você pode obter os milissegundos decorridos entre duas datas subtraindo-as, o que as coercula em seu valor numérico primitivo (milissegundos desde o início de 1970).
// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
var mdy = str.split('/');
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
function datediff(first, second) {
// Take the difference between the dates and divide by milliseconds per day.
// Round to nearest whole number to deal with DST.
return Math.round((second-first)/(1000*60*60*24));
}
alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
Você deve estar ciente de que o "normal" Data APIs (sem "UTC" no nome) operam no fuso horário local do usuário's browser, então em geral você pode encontrar problemas se o seu usuário estiver em um fuso horário que você não espera't, e seu código terá que lidar com as transições de horário de verão. Você deve ler cuidadosamente a documentação do objeto Data e seus métodos, e para qualquer coisa mais complicada, considere fortemente o uso de uma biblioteca que ofereça APIs mais seguras e poderosas para manipulação de data.
Além disso, para fins ilustrativos, o snippet utiliza named access on the window
object para brevidade, mas na produção você deve utilizar APIs padronizadas como getElementById, ou mais provavelmente, algum framework.</sub> da UI;
Eu iria em frente e pegaria esta pequena utilidade e nela você encontrará funções para isto para você. Aqui's um pequeno exemplo:
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>
Que tal usar formatDate do widget DatePicker? Você poderia usá-lo para converter as datas no formato timestamp (milissegundos desde 01/01/1970) e depois fazer uma simples subtração.