#javascript #arrays #loops
Вопрос:
итак, у меня есть список массивов времени и даты, которые я хочу объединить в формат iso как appointmateDate, так и appointmentTime, и получить новый массив временных интервалов, возможно ли это 🙏 🏻
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)
Ответ №1:
С помощью setHours
.
Выполните цикл по массиву, используя Array#map
и создайте новый Date
объект, используя appointmentDate
, а затем используя setHours
и appointmentTime
установите время.
ПРИМЕЧАНИЕ: 20:51 am
не является допустимым временем, если оно указано в 24-часовом формате, в этом нет необходимости 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);
Один Лайнер
Логика остается точно такой же, ее просто выражения вместо утверждений.
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);
Ответ №2:
Что было не совсем ясно, так это то, как должна была работать эта часть времени. Как и в случае, 17:51 am
не является допустимым часом:минутный фрагмент времени, так как am указывает на 12-часовые часы, но 17 указывает на 24 — часовые часы. Но потом я заметил, что все ваши строки даты включали 23-часовую задержку, так что, если эта часть времени является просто minute:second
значением. Если это так, то приведенный ниже бит должен работать.
Однако это по-прежнему не учитывает часовые пояса (обозначенные буквой Z в формате ISO). Кроме того, не совсем понятно, что вы подразумеваете под «диапазонами», поскольку это всего лишь отдельные строки дат, не связанные друг с другом.
Я рекомендую уточнить ваш вопрос. В любом случае, надеюсь, это поможет:
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',
},
]
time.map(obj => {
let newTimeString = obj.appointmentTime.substr(0, 5)
return obj.appointmentDate.replace('00:00.000Z', newTimeString '.000Z')
})