Php 我想得到while循环日期中的第一天和最后一天,并将它们放入一个变量中

Php 我想得到while循环日期中的第一天和最后一天,并将它们放入一个变量中,php,datetime,while-loop,do-while,Php,Datetime,While Loop,Do While,我有一个类似日历的东西来记录祈祷时间 比如说从(05-12-2020)到(07-28-2020)的日历 这个日历有两个祈祷时间,一个在晚上,另一个在早上,在乞讨和月末,它们是完全不同的时间 例如:第一次祈祷是在凌晨01:42,第二次祈祷是在凌晨00:19 .. 所以我在这里没有问题。 p>但在这个日期范围内,它们在同一时间内同时存在 例如:第一次祈祷变成(凌晨1:17),第二次也变成(凌晨1:17) 如何知道第一天和最后一天相似的日期,并将其放入变量中?? 我很抱歉,因为我真的不能很好地解释我

我有一个类似日历的东西来记录祈祷时间

比如说从(05-12-2020)到(07-28-2020)的日历

这个日历有两个祈祷时间,一个在晚上,另一个在早上,在乞讨和月末,它们是完全不同的时间

例如:第一次祈祷是在凌晨01:42,第二次祈祷是在凌晨00:19 .. 所以我在这里没有问题。

<> p>但在这个日期范围内,它们在同一时间内同时存在

例如:第一次祈祷变成(凌晨1:17),第二次也变成(凌晨1:17)

如何知道第一天和最后一天相似的日期,并将其放入变量中??

我很抱歉,因为我真的不能很好地解释我的意思,代码也非常大,所以我不能粘贴它,但我会上传一张图片来澄清更多

请注意:我使用while循环通过一些数学和天文方程计算它们,不同城市的时间不同,因此它们是动态的而不是静态的,但情况是一样的

我在想类似的事情

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

迭代时,检查匹配时间

在第一次遇到时,将这两个变量与行的日期一起保存

在随后的匹配遭遇中,覆盖最后日期

一旦找到第一个日期并且存在时间不匹配,就中断循环以避免不必要的迭代

伪代码:

$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;
    }
}
非常感谢你帮助我,我就是这样解决的

我将过程分为两个循环,第一个循环获取日期并将其存储到数组中(然后获取数组的第一个元素和最后一个元素),第二个循环是我的主要大循环,用于打印和修改日历变量和函数

我不知道这是不是一个专业的解决方案,但它的工作方式无论如何,给我什么我真正需要的

// 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);
//全年祈祷日历
$Begin_Date=$STAGING_Date=STROTIME(“2020-01-01”);
$Ending_Date=标准时间(“2020-12-31”);
//我的数组键号
$Array\u Key\u Number=0;
//创建一个新数组
$Days_Date=array();
而($Starting_Date timeZoneId));
$timeZone=$d->format('P');
$date=$Starting_date;
$PrayerTimes=$PrayingTimes->getPrayerTimes($date、$latitude、$latitude、$timeZone);
//当第一次祈祷和第二次祈祷的时间相似时。。。
//创建一个数组并在其中存储日期
如果($prairtimes[0]==$prairtimes[6]){
//在我的新数组中存储每个日期
$Days\u Date[$Array\u Key\u Number]=日期(“Y-m-d”,$start\u Date);
$Array_Key_Number++;
}
$Starting_Date=STROTIME(“+1天,$Starting_Date”);
}
//数组中的第一个元素
$First_Date=$Days_Date[0];
//数组中的最后一个元素
$Last_Date=结束($Days_Date);

请提供样本数据作为
var\u export()
。请用
break
显示循环条件变量声明。我感谢您的帮助,我为错误地删除此问题表示歉意。。我曾多次尝试通过此页面和您的个人资料来提高您的声誉,但我不知道如何提高声誉,因为我很少使用会员身份登录,实际上我无法使用您的确切解决方案,因为在我的情况下,我无法打破while循环,但您的回答帮助我获得另一个想法。。我做了两个不同的循环,第一个循环仅用于获取两个日期并将它们存储在数组中,第二个循环是用于打印和修改日历变量的主循环。这就是为什么您提供一个非常重要的循环,以便志愿者能够自信地提供一个适合您的应用程序的工作解决方案。