Estoy viendo un video donde la diferencia entre dos fechas devuelve 10 pero cuando lo intento me da un número decimal, pero ¿por qué? Podría envolverlo en Math.floor() pero agradecería que alguien me explicara. Aquí está el código
const calcDaysPassed = (date1, date2) => Math.abs(date2 - date1) / (1000 * 60 * 60 * 24); const days1 = calcDaysPassed( new Date(2037, 3, 4), new Date(2037, 3, 14) ); console.log(days1);"Los objetos de Date contienen un Number que representa milisegundos desde el 1 de enero de 1970 UTC". MDN
date2 - date1 devuelve la diferencia en milisegundos. La conversión se describe en MDN :
El método
[@@toPrimitive]()del objetoDatedevuelve un valor primitivo, que es de tiponumbero de tipostring.Si la
hintesstringodefault,[@@toPrimitive]()intenta llamar al métodotoString. Si la propiedad toString no existe, intenta llamar al métodovalueOfy sivalueOftampoco existe,[@@toPrimitive]()arroja unTypeError.Si la
hintes unnumber,[@@toPrimitive]()primero intenta llamar avalueOfy, si eso falla, llama atoString.JavaScript llama al método
[@@toPrimitive]()para convertir un objeto en un valor primitivo. Rara vez necesita invocar el método[@@toPrimitive]()usted mismo; JavaScript lo invoca automáticamente cuando encuentra un objeto donde se espera un valor primitivo.
Math.abs(date2 - date1) / (1000 * 60 * 60 * 24) convierte los milisegundos en días.
Los objetos de fecha representan un solo instante en el tiempo y son solo un valor de tiempo que es un desplazamiento desde el 1 de enero de 1970 UTC.
El operador de resta obliga a los objetos de fecha a numerar como si fuera por date.valueOf() que es equivalente a date.getTime() , por lo que cuando resta una fecha de otra obtiene la diferencia en sus valores de tiempo de manera que:
dateA - dateB === dateA.getTime() - dateB.getTime()Así que en tu código:
new Date(2037, 3, 4) - new Date(2037, 3, 14);devuelve la diferencia en milisegundos:
-864000000que son 10 días estándar.
Tenga en cuenta que los valores pasados al constructor de fecha anterior se interpretan como locales, por lo que si hay un cambio de horario de verano en el rango de fechas, la diferencia podría ser más o menos por la cantidad del cambio de horario de verano (normalmente 1 hora pero en algunos lugares 30). minutos).
Hay muchas preguntas similares: