javascript добавляет объект даты и времени в массив

#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')
})