MomentJS Парсинг большой строки данных - PullRequest
0 голосов
/ 27 декабря 2018

Итак, у меня есть такой тип данных startTime: Fri Dec 28 2018 01:15:00 GMT+0200 (Eastern European Standard Time) и этот endTime: Mon Dec 31 2018 02:15:00 GMT+0200 (Eastern European Standard Time) Данные всегда в этом формате.Мне нужно разобрать его, чтобы иметь каждый день массив объектов со всеми днями между startTime и endTime в часы startTime и endTime (в данном случае 1:15 - 2:15) Любые идеи?У меня есть ответ, который

function toDays(startDateString, endDateString) {

  const startDate = moment(startDateString, 'dddd MMM DD YYYY');
  const endDate = moment(endDateString, 'dddd MMM DD YYYY');

  const dates = [];

  while(startDate.isSameOrBefore(endDate, 'day')) {
    let currentDay = startDate.format('dddd');
    dates[currentDay] = [];
    dates[currentDay].push({start:'9:00', end:'18:00'});
    startDate.add(1, 'days');
  }

  return dates;
}

const result = toDays('Mon Dec 24 2018', 'Fri Dec 28 2018');
console.log(result);

Но я не могу по-настоящему его использовать, я не совсем уверен, как это исправить, так как никогда раньше не работал.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Если я правильно понимаю вопрос, возможно, у вас возникли проблемы с выяснением, как анализировать формат startTime: Fri Dec 28 2018 01:15:00 GMT+0200 (Eastern European Standard Time)?Если это действительно так, то я думаю, что следующий код может помочь:

<script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.js'></script>
<script>
function toDays(startDateString, endDateString) {
  const formatString = 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ [(Eastern European Standard Time)]';
  const startDate = moment(startDateString, formatString).utcOffset("+02:00");
  const endDate = moment(endDateString, formatString).utcOffset("+02:00");
  const start = startDate.format('H:mm');
  const end = endDate.format('H:mm');

  const dates = [];

  while(startDate.isSameOrBefore(endDate, 'day')) {
    let currentDay = startDate.format('dddd');
    dates.push({day: currentDay, start: start, end: end});
    startDate.add(1, 'days');
  }

  return dates;
}

const result = toDays('Fri Dec 28 2018 01:15:00 GMT+0200 (Eastern European Standard Time)', 'Mon Dec 31 2018 02:15:00 GMT+0200 (Eastern European Standard Time)');
console.log(result);
</script>

Суть в том, что строка const formatString = 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ [(Eastern European Standard Time)]'; анализирует формат даты, который вы указали правильно.

0 голосов
/ 27 декабря 2018

Добавьте имя дня к новому объекту, который вы создаете, как свойство, например day, и вставьте весь этот объект в массив

. Измените

dates[currentDay] = [];
dates[currentDay].push({start:'9:00', end:'18:00'});

На

* 1008.*
...