я хочу получить первый и последний день за некоторое время l oop и поместить их в переменную - PullRequest
0 голосов
/ 28 марта 2020

у меня есть что-то вроде календаря для молитв,

скажем, календарь с (05-12-2020) по (07-28-2020)

в этом календаре 2 время молитвы, одно вечером, другое утром, в начале и в конце месяца они совершенно разные времена

как пример: первая молитва в (01:42 AM) и второе в (00:19 AM) .. , поэтому здесь нет проблем со мной.

, но они становятся одновременно на несколько дни в середине этого диапазона дат

в качестве примера: первая молитва становится (01:17 AM), а вторая становится (01:17 AM)

как я могу узнать дату первого и последнего дня, когда они стали похожими, и поместить ее в переменную ???

извините, потому что я действительно не могу объяснить, что я имею в виду очень хорошо, и код также очень большой, поэтому я не могу вставить его, но я загружу изображение, чтобы уточнить больше

* 1 028 * Пожалуйста, обратите внимание: Я вычисляю их с помощью некоторых математических и астрономических уравнений, используя время l oop, и время в разных городах отличается, поэтому они являются динамическими c не статичными c но такая же ситуация случается

Я думаю о чем-то подобном

if($first_prayertime == $second_prayertime){
//give me the first and last date they are similar
//and put every one of them in a variable
}

the calnder

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Спасибо @ mickmackusa большое за помощь, вот как я решил это

я разделил процесс на два цикла, первый l oop, чтобы получить даты и сохраните их в массив (затем получите первый элемент и последний элемент массива), а второй l oop - это мой главный большой l oop для печати и изменения моих переменных и функций календаря

Не знаю, профессиональное это решение или нет, но оно все равно работает и дает мне то, что мне действительно нужно.

// prayer calendar for the whole year
$Begin_Date = $Starting_Date = strtotime("2020-01-01");
$Ending_Date = strtotime("2020-12-31");

// My array key number
$Array_Key_Number = 0;
// create a new array
$Days_Date = array();

while($Starting_Date <= $Ending_Date){
      // get the timezone every day to know if is there a daylight saving or not
      $d = new DateTime(date('Y-m-d 12:00:00',$Starting_Date), new DateTimeZone($row->timeZoneId));
      $timeZone = $d->format('P');
      $date = $Starting_Date;
      $PrayerTimes = $PrayingTimes->getPrayerTimes($date, $latitude, $longitude, $timeZone);

      // when the first prayer and second prayer are similar in times...
      // create an array and store the dates in it
      if($PrayerTimes[0] == $PrayerTimes[6]){
          // store every single date in my new array
          $Days_Date[$Array_Key_Number] = date("Y-m-d",$Starting_Date);   
          $Array_Key_Number++;
      }

$Starting_Date = strtotime("+1 day", $Starting_Date);   

}
// first element in array
$First_Date = $Days_Date[0];
// last element in array
$Last_Date  = end($Days_Date);
0 голосов
/ 28 марта 2020

Во время итерации проверьте время совпадения.

При первом столкновении сохраните обе переменные с датой строки.

При последующих совпадениях перезапишите последнюю дату.

Как только будет найдена первая дата И будет рассогласовано время, разбейте l oop, чтобы избежать ненужных итераций.

Псевдокод:

$firstPrayerDate = null;
foreach ($prayerData as $row) {
    if ($row['first_prayertime'] === $row['second_prayertime']) {
        if (!$firstPrayerDate) {
            $firstPrayerDate = $row['prayerDate'];
            $lastPrayerDate = $firstPrayerDate
        } else {
            $lastPrayerDate = $row['prayerDate'];
        }
    } elseif ($firstPrayerDate) {
        break;
    }
}
...