3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * @Class : IntervalDate * @Autor : FelipeBarros<felipe.barros.pt@gmail.com> * @Description : Servico responsavel retornar os dias da semana entre o intervalo de duas datas * @Version : 1.0 [2014-09-14] * */ class IntervalDate { private $week_days = [ 'mon' => 'monday', 'tue' => 'tuesday', 'wed' => 'wednesday', 'thu' => 'thursday', 'fri' => 'friday', 'sat' => 'saturday', 'sun' => 'sunday' ]; private $start_date; private $final_date; private $n_diff_days; private $format = 'Y-m-d'; private $result = []; public function __construct($start_date, $final_date) { $this->start_date = new \DateTime($start_date); $this->final_date = new \DateTime($final_date); $this->n_diff_days = $this->final_date->diff($this->start_date)->format('%d'); } public function process($week_days) { if($this->n_diff_days) { for($i = 0; $i <= $this->n_diff_days; $i++) { if($i == 0) { $date = $this->start_date->format($this->format); $week_day = strtolower($this->start_date->format('D')); } else { $new_date = $this->start_date->modify('+1 day'); $date = $new_date->format($this->format); $week_day = strtolower($new_date->format('D')); } if(in_array($this->week_days[$week_day], $week_days)) { $this->result[] = ['date' => $date, 'day' => $this->week_days[$week_day]]; } } } return $this; } public function get() { return $this->result; } } $intervalDate = new IntervalDate('2014-10-01', '2014-10-20'); $week_days = ['monday', 'sunday']; $result = $intervalDate->process($week_days)->get(); var_dump($result);

preferences:
30.06 ms | 402 KiB | 5 Q