¿Cómo puedo obtener el número de días entre dos fechas en JavaScript?

¿Cómo puedo obtener el número de días entre dos fechas en JavaScript? Por ejemplo, dadas dos fechas en cajas 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>
Solución

Aquí hay una implementación rápida y sucia de datediff, como prueba de concepto para resolver el problema presentado en la pregunta. Se basa en el hecho de que se pueden obtener los milisegundos transcurridos entre dos fechas restándolas, lo que las convierte en su valor numérico primitivo (milisegundos desde el comienzo de 1970).

begin snippet: js hide: false console: true babel: false -->

// 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"/>

...fin del fragmento..;

Debe tener en cuenta que las APIs de Date "normales" (sin "UTC" en el nombre) operan en la zona horaria local del navegador del usuario, por lo que en general podría tener problemas si su usuario está en una zona horaria que no espera, y su código tendrá que lidiar con las transiciones del horario de verano. Debería leer cuidadosamente la documentación del objeto Date y sus métodos, y para cualquier cosa más complicada, considere fuertemente el uso de una biblioteca que ofrezca APIs más seguras y potentes para la manipulación de fechas.

Además, con fines ilustrativos, el fragmento utiliza acceso con nombre en el objeto window por razones de brevedad, pero en producción debería utilizar APIs estandarizadas como getElementById, o más probablemente, algún framework de UI;

Comentarios (6)

Yo seguiría adelante y cogería esta pequeña utilidad y en ella encontrarás funciones para esto para ti. Aquí's un ejemplo corto:

        <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>
Comentarios (0)

¿Qué tal si utilizas formatDate del widget DatePicker? Podrías usarlo para convertir las fechas en formato timestamp (milisegundos desde el 01/01/1970) y luego hacer una simple resta.

Comentarios (0)