"Date objects contain a Number that represents milliseconds since 1 January 1970 UTC." MDN
date2 - date1 returns the difference in milliseconds. The conversion is described in MDN:
The [@@toPrimitive]() method of the Date object returns a primitive
value, that is either of type number or of type string.
If hint is string or default, [@@toPrimitive]() tries to call the
toString method. If the toString property does not exist, it tries to
call the valueOf method and if the valueOf does not exist either,
[@@toPrimitive]() throws a TypeError.
If hint is number, [@@toPrimitive]() first tries to call valueOf, and
if that fails, it calls toString.
JavaScript calls the [@@toPrimitive]() method to convert an object to
a primitive value. You rarely need to invoke the [@@toPrimitive]()
method yourself; JavaScript automatically invokes it when encountering
an object where a primitive value is expected.
Math.abs(date2 - date1) / (1000 * 60 * 60 * 24) converts the milliseconds to days.