← #80 Create a polyfill
#81

# Keep the calculation of a magic number

Topics: JavaScript

Let's say that we want to calculate the number of difference days between two given dates.
By simply using the `-` operator, it's easy for us to calculate the differences between two date objects, `date` and `otherDate` for example:

``const diff = Math.abs(date - otherDate);``

The function returns the number of milliseconds. In order to get the number of days, we have to divide it by `86400000`:

``Math.ceil(diff / 86400000);``

We know that `86400000` is the total number of milliseconds in a day. The code is still working fine until there's another people on the team looking at it, and it takes them time to realize what the number `86400000` is.

To make the code more readable and easy to maintain, we should replace the magic number with its calculation:

``// Better versionconst diffDays = (date, otherDate) => (    Math.ceil(Math.abs(date - otherDate) / 1000 * 60 * 60 * 24));``

If the number is used across different places, for example when we create a library for manipulating dates, then it's recommended to declare the magic number as a constant:

``// The best version// constants.jsconst MILLISECOND_DAY = 1000 * 60 * 60 * 24;export { MILLISECOND_DAY };``

Then reuse it later:

``import { MILLISECOND_DAY } from './constants';const diffDays = (date, otherDate) => (    Math.ceil(Math.abs(date - otherDate) / MILLISECOND_DAY));``

More

Fix a typo or suggest an improvement