DEV Community

Matthew Palmer
Matthew Palmer

Posted on

Handling time in JavaScript

Depending on the project you are building, time can be a very important skill to master. This reality hit me when I went head first in a challenge on Edabit.com

Here is the general problem it needed me to solve:

function hoursPassed(t1, t2) {
    // `t2 - t1` must return the amount of hours passed
    // It must also return `There is no time passed.` 
    // if t2 is equal to t1
}
Enter fullscreen mode Exit fullscreen mode

Time is tricky since 1 hour behind 12:00 AM isn't 11:00 AM.
Naturally, we want our algorithm to reflect the laws of time. Wouldn't it be nice if this worked?

function hoursPassed(t1, t2) {
     return t2 - t1
}
Enter fullscreen mode Exit fullscreen mode

Unfortunately, this doesn't work for us. Time does come in different forms, however. Does military time ring a bell? Anything over 12:00 PM just adds to the hour. So 1:00 PM is really 13:00. That logic is handled below, assuming we pass the time of day in as an argument.

const hour = time =>
    time === "12:00 AM" ? 0 : +time.split(":")[0] + 12 * time.includes("P")
Enter fullscreen mode Exit fullscreen mode

Above, we are passing our time in as an argument. If it is midnight, the hour should be 0 out of 24 in a day. Otherwise, we are grabbing the parsed hour and only adding 12 to it if it is in the PM and not the AM. With booleans, true is equal to 1 while false is equal to 0. As far as numerical values go, this is a major convenience for us.

In PEMDAS (throwback to our younger days, no?), multiplication happens before addition. Our 12 is multiplied by either 0 or 1 depending on morning or afternoon time.

// Example outputs

hour("2:00 PM") // -> 14
hour("11:00 PM") // -> 23
hour("3:00 AM") // -> 3
hour("6:00 AM") // -> 6
Enter fullscreen mode Exit fullscreen mode

Fantastic! We have successfully created a function that converts our time into military time.

Now, we can use this function to our advantage:

function hoursPassed(t1, t2) {
    const h = hour(t2) - hour(t1);
    return h ? `${h} hours passed.` : "No time has passed"
}
Enter fullscreen mode Exit fullscreen mode

Within our function, we have set a constant variable of h equal to the hour difference. If h is equal to 0, then our ternary knows to return "No time has passed.". Remember that 0 equals false and 1+ equals true. Anything greater than 0 will ultimately be our hours passed.

I hope this algorithm helps many devs out there! This is bound to be in someone's technical interview. :)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay