当用JavaScript减去两个日期时,它会给我一个十进制数字,但这怎么可能呢



我在看一个视频,两个日期之间的差异返回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分钟(。

有很多类似的问题:

  1. 在JavaScript中获取两个日期之间的差异
  2. 以秒为单位获取两个日期之间的时差
  3. 如何计算两个日期之间的天数

"Date对象包含表示自1970年1月1日UTC以来的毫秒数的Number">MDN

date2 - date1以毫秒为单位返回差值。MDN:中描述了转换

Date对象的[@@toPrimitive]()方法返回一个基元值,即类型number或类型string

如果hintstringdefault,则[@@toPrimitive]()尝试调用CCD_ 14方法。如果toString属性不存在,它会尝试调用CCD_ 15方法,如果CCD_,17抛出一个CCD_ 18。

如果hintnumber,则[@@toPrimitive]()首先尝试调用valueOf,并且如果失败,则调用toString

JavaScript调用[@@toPrimitive]()方法将对象转换为原始值。您很少需要调用[@@toPrimitive]()方法自己;JavaScript在遇到时自动调用它期望有基元值的对象。

Math.abs(date2 - date1) / (1000 * 60 * 60 * 24)将毫秒转换为天。

相关内容

  • 没有找到相关文章

最新更新