Home > Software design >  How to get the UTC time given any timezone and hour (considering daylight savings)
How to get the UTC time given any timezone and hour (considering daylight savings)

Time:07-13

An example would be 9am CST (central standard time), or 6am CET (Central European Time).

Using any new Date() calls will always give me a date in my local time zone (BST, or GMT 1).

I think I need to first create the date in the desired timezone, no?

function convertToUTC(date, tzString) {
   // some code?  
}

let resp = convertToUTC("2022-07-12 09:00:00", "America/Chicago");

console.log(resp)

should be 
"2022-07-12T14:00:00Z"

CodePudding user response:

Based on MDN documentation.

console.log(new Intl.DateTimeFormat('en-GB', { dateStyle: 'full', timeStyle: 'long' }).format(date));

This will output

// Expected output "Sunday, 20 December 2020 at 14:23:16 GMT 11"

There are many options, and many locales. You can check them all out here.

CodePudding user response:

I would definitely suggest using a specialized date/time library for this purpose.

Timezone conversion in vanilla JavaScript is tricky to say the least (especially converting from a timezone to UTC)

However this is quite straightforward in luxon:

I'm using the DateTime.fromSQL() function here since it matches the input timestamp format.

const { DateTime } = luxon;

function convertToUTC(date, tzString) {
   const dt = DateTime.fromSQL(date, { zone: tzString });
   return dt.setZone('UTC');
}

console.log(convertToUTC("2022-07-12 09:00:00", "America/Chicago"));
console.log(convertToUTC("2022-07-12 09:00:00", "America/Los_Angeles"));
console.log(convertToUTC("2022-07-12 09:00:00", "Europe/London"));
.as-console-wrapper { max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.3.1/luxon.min.js" integrity="sha512-Nw0Abk Ywwk5FzYTxtB70/xJRiCI0S2ORbXI3VBlFpKJ44LM6cW2WxIIolyKEOxOuMI90GIfXdlZRJepu7cczA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

  • Related