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?
CodePudding user response:
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%; }
CodePudding user response:
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',
})
);