so I have a list of array of time and date I want to join both appointmateDate and appointmentTime to iso format and get a new array of timeRange is that possible🙏🏻
const time = [
{
"appointmentDate": "2021-12-24T23:00:00.000Z",
"appointmentTime": "17:51 am"
},
{
"appointmentDate": "2021-12-24T23:00:00.000Z",
"appointmentTime": "18:51 am"
},
{
"appointmentDate": "2021-12-24T23:00:00.000Z",
"appointmentTime": "19:51 am"
},
{
"appointmentDate": "2021-12-24T23:00:00.000Z",
"appointmentTime": "20:51 am"
}
]
console.log(time)Advertisement
Answer
Using setHours.
Loop over the array using Array#map and create a new Date object using appointmentDate and then using setHours and appointmentTime set the time.
NOTE: 20:51 am is not a valid time, if it is in 24 hour format there’s no need for am, pm.
const
time = [{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"17:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"18:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"19:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"20:51 am"}],
res = time.map(({ appointmentDate, appointmentTime }) => {
const date = new Date(appointmentDate);
const hour = appointmentTime.slice(0, 2);
const min = appointmentTime.slice(3, 5);
date.setHours(hour, min)
return date.toISOString();
});
console.log(res);One Liner
Logic remains exactly the same, its just expressions instead of statements.
const
time = [{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"17:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"18:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"19:51 am"},{appointmentDate:"2021-12-24T23:00:00.000Z",appointmentTime:"20:51 am"}],
res = time.map(
({ appointmentDate, appointmentTime }, _i, _arr, d = new Date(appointmentDate)) =>
(d.setHours(appointmentTime.slice(0, 2), appointmentTime.slice(3, 5)), d.toISOString())
);
console.log(res);