我在看一个视频,两个日期之间的差异返回10,但当我尝试时,它会给我一个十进制数字,但为什么?我可以用Math.floor((把它包装起来,但如果有人能解释我,我将不胜感激。这是代码
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);
Date对象表示一个时间瞬间,只是一个从1970年1月1日UTC偏移的时间值。
减法运算符强制Date对象按date.valueOf()
进行编号,CCD_1相当于date.getTime()
,因此当您将一个日期与另一个日期相减时,您会得到它们的时间值差,例如:
dateA - dateB === dateA.getTime() - dateB.getTime()
所以在你的代码中:
new Date(2037, 3, 4) - new Date(2037, 3, 14);
返回以毫秒为单位的差值:
-864000000
即10个标准日。
请注意,上面传递给Date构造函数的值被解释为本地值,因此,如果在日期范围内有夏令时转换,则差异可能或多或少与夏令时转换量有关(通常为1小时,但在某些地方为30分钟(。
有很多类似的问题:
- 在JavaScript中获取两个日期之间的差异
- 以秒为单位获取两个日期之间的时差
- 如何计算两个日期之间的天数
"Date
对象包含表示自1970年1月1日UTC以来的毫秒数的Number
">MDN
date2 - date1
以毫秒为单位返回差值。MDN:中描述了转换
Date
对象的[@@toPrimitive]()
方法返回一个基元值,即类型number
或类型string
。如果
hint
是string
或default
,则[@@toPrimitive]()
尝试调用CCD_ 14方法。如果toString属性不存在,它会尝试调用CCD_ 15方法,如果CCD_,17抛出一个CCD_ 18。如果
hint
是number
,则[@@toPrimitive]()
首先尝试调用valueOf
,并且如果失败,则调用toString
。JavaScript调用
[@@toPrimitive]()
方法将对象转换为原始值。您很少需要调用[@@toPrimitive]()
方法自己;JavaScript在遇到时自动调用它期望有基元值的对象。
Math.abs(date2 - date1) / (1000 * 60 * 60 * 24)
将毫秒转换为天。