fork download
  1. <?php
  2.  
  3. function get_recurring($recurring_day, $start_datetime, $end_datetime, $now) {
  4. if ($recurring_day) {
  5. $w = $now->format('l');
  6. $w = strtolower($w);
  7.  
  8. $new_datetime = $now;
  9. if ($w != $recurring_day) {
  10. $new_datetime = $now->modify('next '.$recurring_day);
  11. }
  12. $new_datetime = $new_datetime->setTime($start_datetime->format('G'), $start_datetime->format('i'));
  13.  
  14. $period = new DatePeriod($new_datetime, new DateInterval('P7D'), 6);
  15. $count = 0;
  16. foreach ($period as $date) {
  17. if ($date > $now && $date <= $end_datetime) {
  18. yield [
  19. true,
  20. $date,
  21. $end_datetime ? $date->setTime($end_datetime->format('G'), $end_datetime->format('i')) : null,
  22. ];
  23. $count++;
  24. if ($count >= 4) {
  25. return;
  26. }
  27. }
  28. }
  29. return;
  30. }
  31. yield [
  32. false,
  33. $start_datetime,
  34. $end_datetime,
  35. ];
  36. }
  37.  
  38. foreach (get_recurring('tuesday', DateTime::createFromFormat('d.m.Y G:i', '01.10.2024 9:30'), DateTime::createFromFormat('d.m.Y G:i', '17.12.2024 10:30'), new DateTime()) as $datetime) {
  39. var_export($datetime);
  40. echo "\n";
  41. }
Success #stdin #stdout 0.02s 26112KB
stdin
Standard input is empty
stdout
array (
  0 => true,
  1 => 
  DateTime::__set_state(array(
     'date' => '2024-10-01 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
  2 => 
  DateTime::__set_state(array(
     'date' => '2024-10-01 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
)
array (
  0 => true,
  1 => 
  DateTime::__set_state(array(
     'date' => '2024-10-08 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
  2 => 
  DateTime::__set_state(array(
     'date' => '2024-10-08 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
)
array (
  0 => true,
  1 => 
  DateTime::__set_state(array(
     'date' => '2024-10-15 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
  2 => 
  DateTime::__set_state(array(
     'date' => '2024-10-15 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
)
array (
  0 => true,
  1 => 
  DateTime::__set_state(array(
     'date' => '2024-10-22 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
  2 => 
  DateTime::__set_state(array(
     'date' => '2024-10-22 10:30:00.000000',
     'timezone_type' => 3,
     'timezone' => 'UTC',
  )),
)