Create Human-Readable Time Formatting

JavaScriptJavaScriptBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

In this lab, we will explore a function called formatDuration that helps us convert a given number of milliseconds into a human-readable format. We will learn how to use mathematical operations to extract the appropriate values for days, hours, minutes, seconds, and milliseconds. We will also use various array methods like filter, map, and join to create a string that displays the duration in a user-friendly way. By the end of this lab, you will have a deeper understanding of how to manipulate and format time-related data in JavaScript.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript/BasicConceptsGroup -.-> javascript/variables("`Variables`") javascript/BasicConceptsGroup -.-> javascript/data_types("`Data Types`") javascript/BasicConceptsGroup -.-> javascript/arith_ops("`Arithmetic Operators`") javascript/BasicConceptsGroup -.-> javascript/comp_ops("`Comparison Operators`") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("`Conditional Statements`") javascript/BasicConceptsGroup -.-> javascript/array_methods("`Array Methods`") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("`Higher-Order Functions`") javascript/AdvancedConceptsGroup -.-> javascript/template_lit("`Template Literals`") subgraph Lab Skills javascript/variables -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/data_types -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/arith_ops -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/comp_ops -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/cond_stmts -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/array_methods -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/higher_funcs -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} javascript/template_lit -.-> lab-28316{{"`Create Human-Readable Time Formatting`"}} end

Format Duration

To get the human-readable format of a given number of milliseconds, follow these steps:

  1. Open the Terminal/SSH and type node to start practicing coding.
  2. Divide the ms with appropriate values to obtain the appropriate values for day, hour, minute, second, and millisecond.
  3. Use Object.entries() with Array.prototype.filter() to keep only non-zero values.
  4. Create the string for each value, pluralizing appropriately, using Array.prototype.map().
  5. Combine the values into a string using Array.prototype.join().

Here's the code:

const formatDuration = (ms) => {
  if (ms < 0) ms = -ms;
  const time = {
    day: Math.floor(ms / 86400000),
    hour: Math.floor(ms / 3600000) % 24,
    minute: Math.floor(ms / 60000) % 60,
    second: Math.floor(ms / 1000) % 60,
    millisecond: Math.floor(ms) % 1000
  };
  return Object.entries(time)
    .filter((val) => val[1] !== 0)
    .map(([key, val]) => `${val} ${key}${val !== 1 ? "s" : ""}`)
    .join(", ");
};

Here are some examples:

formatDuration(1001); // '1 second, 1 millisecond'
formatDuration(34325055574);
// '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'

Summary

Congratulations! You have completed the Format Duration lab. You can practice more labs in LabEx to improve your skills.

Other JavaScript Tutorials you may like