Continuing with the set of articles that talk about internationalisation elements, like the previous one where we talked about relative dates in JavaScript, we will see in this one how to format hours in JavaScript.
The first thing we need to do is to create an 'hour' in JavaScript. That is, what we understand by hour, minute and second. To do this we'll use the Date object, which we'll dump on a constant.
const myday = new Date('June 10, 2021 20:00:30 GMT+00:00');
We can see that we have used a format with the day plus the time. Although we could have created the Date object as it is, thus containing the current date and time of our system.
The next thing is to use the .toLocaleTimeString(locale) method which receives a BCP 47 tag with the locale. The structure of these tags is that they first have two characters indicating the language, followed by a hyphen and then two characters indicating the country or region being referred to.
So, for example, we have:
- es-ES, for Castilian Spanish in Spain.
- ca-ES, for Catalan in Spain.
- en-EN, for English in the United Kingdom.
- en-US, for English in the United States.
- it-IT, for Italian in Italy
Now, we simply invoke the .toLocaleTimeString(locale) method on the date we created.
// The American format will set it to AM/PM
console.log(myday.toLocaleTimeString('en-US'));
// The Spanish format will put it in a 24h format.
console.log(myday.toLocaleTimeString('es-ES'));
When executing this code we will see that when we indicate an American locale, i.e. en-US, the time format will be from 1 to 12 indicating whether it is AM (ante-meridiem, before noon) or PM (post-meridiem, after noon).
However, in the case of the Spanish locale, es-ES, or Italian it-IT, we will see that the time format will be 24h represented by the hours from 0 to 23.
So we can see that depending on the locale the time will have a different representation and therefore it is very important to format hours in JavaScript in a correct way.