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>