I have a date selector and a time selector, and I'm trying to figure out how I can combine their outputs to make a single ISOString so that I can use with the google calendar API. Here's what I've tried:
//date = 2022-05-18
//time = 14:22
const apptdate = new Date(date)
const timeSplit = time.split(':')
apptDate.setHours(timeSplit[0])
apptDate.setMinutes(timeSplit[1])
What I notice is when I console.log(apptdate) this is the output I get: 2022-05-17T18:22:00.000Z
I'm not sure why it changes the day from May 18 to May 17, and the time from 14:22 to 18:22. Does anyone have a solution for this? Or even a completely different way of combining date and time to one string (other than using a datetime-local input format, I want to keep the date and time separate in my database).
CodePudding user response:
"2022-05-18" is parsed as UTC but apptDate.setHours(timeSplit[0])
sets the local hour. So if the host has a negative offset, the local date is 17 May and the time is set to the local hour on 17 May, not UTC hour on 18 May.
Instead use setUTCHours and setUTCMinutes.
let date = '2022-05-18';
let time = '14:22';
let apptDate = new Date(date);
let timeSplit = time.split(':');
apptDate.setUTCHours(timeSplit[0]);
apptDate.setUTCMinutes(timeSplit[1]);
// 2022-05-18T14:22:00.000Z
console.log(apptDate.toISOString());
PS. There was also a typo: let apptdate
then later apptDate
.
CodePudding user response:
JS shows you the time in a UTC time format, which is universal, that's why you see difference in times (with respect for your local time zone).
If you want to see the time at your local time - use toLocaleString
.
You can read here about the different time formats
let date = "2022-05-18";
let time = "14:22";
const apptDate = new Date(date);
const timeSplit = time.split(':');
apptDate.setHours(timeSplit[0]);
apptDate.setMinutes(timeSplit[1]);
console.log(apptDate.toUTCString())
console.log(apptDate.toLocaleString())