# How to Turn Milliseconds into a Useful Object with JavaScript

Using the source code in the library parse-ms, I wanted to create my utility to create useful objects that turn milliseconds into understandable chunks. I tend not to like to use external libraries for utilities, so this pulls it out into your copy/paste chunk.

We will create the JavaScript utility that converts a given number of milliseconds into an object containing days, hours, minutes, seconds, milliseconds, microseconds, and nanoseconds.

We will first write some code and then talk about the solution:

## Parsing Milliseconds

Next, we define the `parseNumber` function. This function takes a number representing milliseconds and returns an object with time components:

```// Ensures that if we have an infinite value, we fallback to zero for predictable results
const toZeroIfInfinity = value => Number.isFinite(value) ? value : 0;

function parseMilliseconds(milliseconds) {
return {
days: Math.trunc(milliseconds / 86_400_000),
hours: Math.trunc(milliseconds / 3_600_000 % 24),
minutes: Math.trunc(milliseconds / 60_000 % 60),
seconds: Math.trunc(milliseconds / 1000 % 60),
milliseconds: Math.trunc(milliseconds % 1000),
microseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1000) % 1000),
nanoseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e6) % 1000),
};
}

// For a number input
const duration = parseMilliseconds(183900000);
console.log(duration);
// Output:
// {
//   days: 2,
//   hours: 3,
//   minutes: 6,
//   seconds: 30,
//   milliseconds: 0,
//   microseconds: 0,
//   nanoseconds: 0
// }
```

## Explanation

First, there's a small utility function called `toZeroIfInfinity`. This function checks if a given number (`value`) is finite. If it is, it returns the number itself. If it's infinite, it returns `0`. This helps prevent errors when dealing with extremely large numbers.

Next, there's the `parseMilliseconds` function. This function takes a duration in milliseconds and breaks it into a more readable object format with days, hours, minutes, seconds, milliseconds, microseconds, and nanoseconds. Here's how it works:

• `days` is calculated by dividing the milliseconds by the number of milliseconds in a day (86,400,000) and removing the decimal part.
• `hours`, `minutes`, and `seconds` are calculated similarly but using the remainder after dividing by the number of milliseconds in the larger units, ensuring they wrap around appropriately (e.g., hours wrap around after 24).
• `milliseconds` is the remainder after dividing by 1,000.
• `microseconds` and `nanoseconds` are calculated by multiplying the milliseconds by 1,000 and 1,000,000, respectively, and then taking the remainder after dividing by 1,000. The `toZeroIfInfinity` function ensures that if the calculations result in infinite values, they are replaced with `0`.

Together, these functions help to transform a potentially unwieldy millisecond value into a structured and easily understandable format.

Another one for the utility folder!

JavaScript

#### Written byNiall Maher

Founder of Codú - The web developer community! I've worked in nearly every corner of technology businesses; Lead Developer, Software Architect, Product Manager, CTO and now happily a Founder.