Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Date.toLocaleString inadequacy for conversion of a date/time to universal time

I’m trying to convert a date object to UTC. Either I’m using it wrong or the Date.toLocaleString seems to be broken or inadequate.

new Date('Tue Aug 09 2022 18:43:00 GMT-0500 (Central Daylight Time)')
    .toLocaleString('en-US', {
      timeZone: "UTC",
      day: "2-digit",
      hour12: false,
      year: "numeric",
      month: "2-digit",
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
    })

output:

"08/09/2022, 23:43:00" (A valid date/time)

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

new Date('Tue Aug 09 2022 19:43:00 GMT-0500 (Central Daylight Time)')
    .toLocaleString('en-US', {
      timeZone: "UTC",
      day: "2-digit",
      hour12: false,
      year: "numeric",
      month: "2-digit",
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
    })

output:

"08/10/2022, 24:43:00"

I expected it to be "08/10/2022, 00:43:00" but instead it appears to not reset the hours.

I have worked around this, in the particular way I was using the result, but I would like to be able to go without the extra conditional and reset.

    var parts = str.match(/(\d{2})\/(\d{2})\/(\d{4}),\s(\d{2})\:(\d{2})\:(\d{2})/),
      month = parseInt(parts[1], 10),
      day = parseInt(parts[2], 10),
      year = parseInt(parts[3], 10),
      hours = parseInt(parts[4], 10),
      minutes = parseInt(parts[5], 10),
      seconds = parseInt(parts[6], 10);

    if (hours == 24) {
      hours = 0;
    }

Why is this happening, and how can I accomplish my goal?

>Solution :

I suppose it’s the americain way of displaying time after midnight when using 24-hour (non 12 hour) time. Try using en-UK for locale:

console.log(
  new Date('Tue Aug 09 2022 19:43:00 GMT-0500 (Central Daylight Time)')
  .toLocaleString('en-UK', {
    timeZone: "UTC",
    day: "2-digit",
    hour12: false,
    year: "numeric",
    month: "2-digit",
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
  })
);
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading