/** * @param $day * @param $time * @return DateHelper */ public function createDateTime($day, $time) { $date = DateHelper::create(); $dayOfWeek = $date->dayOfWeek; $dayOfWeekNeeded = DateHelper::parseSuffix($day); $difference = $dayOfWeekNeeded - $dayOfWeek; $date->addDays($difference); $date->changeTime($time); return $date; }
/** * Converts a days expression to the actual DateTime numbered days array * @param $expression * @return array * @throws Exception */ private function expressionToDays($expression) { $days = []; $expression = str_split($expression); if (sizeof($expression) == 1) { if (($day = DateHelper::parseSuffix($expression[0])) !== null) { $days[] = $day; } else { throw new Exception("Invalid Format"); } } elseif (sizeof($expression) == 2) { $startDay = DateHelper::parseSuffix($expression[0]); $endDay = DateHelper::parseSuffix($expression[1]); if ($startDay !== null && $endDay !== null) { for ($i = $startDay; $i <= $endDay; $i++) { $days[] = $i; } } else { throw new Exception("Invalid Format"); } } else { // They are days non sequential $days = array_map(function ($day) { if ($day = DateHelper::parseSuffix($day)) { return $day; } }, $expression); } return $days; }