• Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, поправил
    let startDay = moment('2018-01-17T08:00:00.000Z').utc(); // было moment('2018-01-17T08:00:00').utc()
    let endDay   = moment('2018-01-17T23:00:00.000Z').utc();


    и все заработало код тут
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, тоже не помогло https://codepen.io/vit134/pen/wpRapg?editors=0010#0
    почему-то интервал начинается с 5 утра и заканчивается 22 вечера
    я вам на почту отправил письмо, если удобно ответьте на него для удобства коммуникаций.
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, без этой строки вообще не работает
    Cannot read property 'valueOf' of undefined


    let startDay = moment('2018-01-17 08:00:00').utc();
    let endDay   = moment('2018-01-17 23:00:00').utc();
    let day = moment.range(startDay, endDay);
    
    function subtractRanges(longRanges, shortRanges) {
      // Always return an array
      if (shortRanges.length === 0)
        return longRanges.hasOwnProperty("length") ? longRanges : [longRanges];
    
      // Result is empty range
      if (longRanges.length === 0) return [];
    
      if (!longRanges.hasOwnProperty("length")) longRanges = [longRanges];
    
      for (let long in longRanges) {
        for (let short in shortRanges) {
          longRanges[long] = longRanges[long].subtract(shortRanges[short]);
          if (longRanges[long].length === 0) {
            // Subtracted an entire range, remove it from list
            longRanges.splice(long, 1);
            shortRanges.splice(0, short);
            return subtractRanges(longRanges, shortRanges);
          } else if (longRanges[long].length === 1) {
            // No subtraction made, but .subtract always returns arrays
            longRanges[long] = longRanges[long][0];
          } else {
            // Successfully subtracted a subrange, flatten and recurse again
            const flat = [].concat(...longRanges);
            shortRanges.splice(0, short);
            return subtractRanges(flat, shortRanges);
          }
        }
      }
      return longRanges;
    }
    
    events.forEach(item => {
        var start = moment(`${item.dateStart}`).utc();
        var end = moment(`${item.dateEnd}`).utc();
        console.log('itemstart', item.dateStart);
        console.log('start', start);
        console.log('end', end);
        rangeEvents.push(moment.range(start, end));
    
    })
    
    //rangeEvents = rangeEvents.splice(1);
                    let newRanges = subtractRanges(day, rangeEvents);
    
                    let newEvents = [];
    
                    newRanges.forEach(item => {
                        newEvents.push({
                            type: 'empty',
                            dateStart: item.start.utc().format(),
                            dateEnd: item.end.utc().format()
                        })
                    })
    
                    console.log(newEvents);
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, вот что у меня получается

    events.forEach(item => {
                        var start = moment(`${item.dateStart}`).utc(); // из бд  формат 2018-01-17T08:00:00.000Z
                        var end = moment(`${item.dateEnd}`).utc();
                        console.log('start', start);
                        console.log('end', end);
                        rangeEvents.push(moment.range(start, end));
    
                    })
    
                    rangeEvents = rangeEvents.splice(1);
                    let newRanges = subtractRanges(day, rangeEvents);
    
                    let newEvents = [];
    
                    newRanges.forEach(item => {
                        newEvents.push({
                            type: 'empty',
                            dateStart: item.start.utc().format(),
                            dateEnd: item.end.utc().format()
                        })
                    })


    на выходе получаю
    start 2018-01-17T08:00:00.000Z
    end moment.utc("2018-01-17T09:30:00.000+00:00")
    start 2018-01-17T15:30:00.000Z
    end moment.utc("2018-01-17T16:15:00.000+00:00")
    start 2018-01-17T16:15:00.000Z
    end moment.utc("2018-01-17T17:30:00.000+00:00")
    start 2018-01-17T18:45:00.000Z
    end moment.utc("2018-01-17T19:30:00.000+00:00")
    { type: 'empty',
        dateStart: '2018-01-17T05:00:00Z',
        dateEnd: '2018-01-17T08:00:00Z' },
      { type: 'empty',
        dateStart: '2018-01-17T09:30:00Z',
        dateEnd: '2018-01-17T15:30:00Z' },
      { type: 'empty',
        dateStart: '2018-01-17T17:30:00Z',
        dateEnd: '2018-01-17T18:45:00Z' },
      { type: 'empty',
        dateStart: '2018-01-17T19:30:00Z',
        dateEnd: '2018-01-17T20:00:00Z' }


    Если бы не первый и последний элемент то все было бы правильно
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, Еще раз спасибо огромное за решение, правда есть одна проблемка, может вы и с ней подскажете (с датами вообще не дружу)
    на codepen все работает отлично, на моих данных даты возвращаются корректно, а вот у меня на сервере (node) не правильные, подозреваю что дело в разнице тайм зон
    Вот что у меня получается
    //даты мероприятий из бд (sqlite)
    start moment.utc("2018-01-17T08:00:00.000+00:00")
    end moment.utc("2018-01-17T09:30:00.000+00:00")
    start moment.utc("2018-01-17T15:30:00.000+00:00")
    end moment.utc("2018-01-17T16:15:00.000+00:00")
    start moment.utc("2018-01-17T16:15:00.000+00:00")
    end moment.utc("2018-01-17T17:30:00.000+00:00")
    start moment.utc("2018-01-17T18:45:00.000+00:00")
    end moment.utc("2018-01-17T19:30:00.000+00:00")
    //результат
    [ { [Number: 21600000]
        start: moment("2018-01-17T12:30:00.000"),
        end: moment("2018-01-17T18:30:00.000") },
      { [Number: 4500000]
        start: moment("2018-01-17T20:30:00.000"),
        end: moment("2018-01-17T21:45:00.000") },
      { [Number: 12600000]
        start: moment("2018-01-17T22:30:00.000"),
        end: moment("2018-01-18T02:00:00.000") } ]
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Александр Косицын, Спасибо огромное, только добрался до компа. Сейчас буду разбираться
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    либо я что то не понимаю либо range работает как то не правильно (скорее всего конечно первый вариант)
    Создал основной range
    var start = new Date(2018, 0, 17, 8, 0, 0);
    var end   = new Date(2018, 0, 17, 23, 0, 0);
    var range = moment.range(start, end);


    У меня есть три range
    { [Number: 5400000]
      start: moment("2018-01-17T08:00:00.000"),
      end: moment("2018-01-17T09:30:00.000") }
    { [Number: 2700000]
      start: moment("2018-01-17T18:30:00.000"),
      end: moment("2018-01-17T19:15:00.000") }
    { [Number: 4500000]
      start: moment("2018-01-17T19:15:00.000"),
      end: moment("2018-01-17T20:30:00.000") }
    { [Number: 2700000]
      start: moment("2018-01-17T21:45:00.000"),
      end: moment("2018-01-17T22:30:00.000") }


    Но когда я в цикле пытаюсь вернуть промежутки получается не так как хотелось
    [ { [Number: 48600000]
        start: moment("2018-01-17T09:30:00.000"),
        end: moment("2018-01-17T23:00:00.000") } ]
    [ { [Number: 37800000]
        start: moment("2018-01-17T08:00:00.000"),
        end: moment("2018-01-17T18:30:00.000") },
      { [Number: 13500000]
        start: moment("2018-01-17T19:15:00.000"),
        end: moment("2018-01-17T23:00:00.000") } ]
    [ { [Number: 40500000]
        start: moment("2018-01-17T08:00:00.000"),
        end: moment("2018-01-17T19:15:00.000") },
      { [Number: 9000000]
        start: moment("2018-01-17T20:30:00.000"),
        end: moment("2018-01-17T23:00:00.000") } ]
    [ { [Number: 49500000]
        start: moment("2018-01-17T08:00:00.000"),
        end: moment("2018-01-17T21:45:00.000") },
      { [Number: 1800000]
        start: moment("2018-01-17T22:30:00.000"),
        end: moment("2018-01-17T23:00:00.000") } ]


    А по идее должны были вернуться 3 промежутка (9:30 - 18:30б 20:30-21:45б 22:30-23:00)
  • Как дополнить массив недостающими данными?

    @vit134 Автор вопроса
    Спасибо за наводку, буду ковыряться.
  • Почему не работает функция Simple HTML DOM в цикле?

    @vit134
    for ($i = 1; 5 >= $i; ++$i) {
            $dateArr[] = date('d-m-Y', strtotime(-24 * $i . ' hours')); // записываю даты для ссылок в массив
        }
    
        $out;
    
        foreach ($dateArr as $key => $dateVal) {
            $out .= '<div class="list_table" date="' . $dateVal . '">' . file_get_contents($url . $dateVal) . '</div>';// записываю контент по ссылкам обернув их в тэг и добавив атрибут с датой
        }
    
        $html = new simple_html_dom();
        $html->load($out);//загружаю контент всех страниц из переменной (НЕ load_file)
        $html->save();
        //ну а дальше все как всегда
        $table = $html->find('.list_table');
    
        foreach ($table as $key => $value) {
            $dd = $value->attr['date'];
    
            foreach ($value->find('table.tb-matches tr') as $key => $tr) {
    
                $elem =  $tr->find('td', 0);
    
                if ($elem->attr['colspan'] != '7') {
                    //echo $tr->find('td', 0)->plaintext;
                    $resultArr[$dd][] = array(
                        'time' => $tr->find('td', 0)->plaintext,
                        'home_team' => $tr->find('td.home-team', 0)->plaintext,
                        'away_team' => $tr->find('td.away_team', 0)->plaintext,
                        'status' => trim($tr->find('td.status', 0)->plaintext),
                        'score' => $tr->find('td.score', 0)->plaintext,
                        'href' => 'http://goal24.ru' . $tr->find('td.option a', 0)->href,
                    );
                }
            }
        }
  • Почему не работает функция Simple HTML DOM в цикле?

    @vit134
    да, в итоге почти так и сделал, только не в файл а в переменную, вот теперь думаю, у меня на каждой странице есть ссылки еще на несколько страниц которые тоже спарсить бы, и вот как это сделать я вообще хз)
  • Почему не работает функция Simple HTML DOM в цикле?

    @vit134
    так мне получается и нечего будет загружать в файл, ведь дальше первой итерации дело не заходит)