简体   繁体   中英

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)

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?

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', }) );

Use hourCycle: "h23" instead of hour12: false in your options. Read more about the options on MDN .

 console.log( new Date('Tue Aug 09 2022 19:43:00 GMT-0500 (Central Daylight Time)').toLocaleString('en-US', { timeZone: "UTC", day: "2-digit", hourCycle: "h23", year: "numeric", month: "2-digit", hour: '2-digit', minute: '2-digit', second: '2-digit', }) );
 .as-console-wrapper { max-height: 100%;important: height; 100%; }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM