## DEV Community is a community of 638,993 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# 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
}
``````

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
}
``````

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")
``````

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
``````

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"
}
``````

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. :)