Autor | Zpráva | ||
---|---|---|---|
Taps Profil |
#1 · Zasláno: 17. 5. 2017, 22:04:41
Zdravím, může mi prosím někdo poradit jak jednoduše a optimalizovaně vytvořit skript pro výpočet datumu doručení ( bez víkendů a státních svátků). Budu mít např. 3 dopravce a k aktuálnímu datumu budu příčítat x dní. Děkuji
|
||
M4n Profil * |
#2 · Zasláno: 17. 5. 2017, 22:42:33
Objekt DateTime bude asi stačit. Konstruktor používá stejnou logiku jako strtotime() a bude tak rozumět i zápisu '+ 3 weekdays', což pro tuto chvíli vrátí pondělí 22. Státní svátky už budeš muset zkontrolovat sám — jestli nějaký den leží mezi dvěma daty, na to se u objektů DateTime dají použít obyčejné operátory nerovnosti.
|
||
Kcko Profil |
#3 · Zasláno: 17. 5. 2017, 22:42:50
Výňatek z jedné mojí starší Nette komponenty:
// ukaze na velikonocni nedeli, napric vsemi casovymi pasmy, jinak funkce easter_day se chova obcas divne, viz php.net public function getEasterDateTime($year) { $base = new \DateTime("$year-03-21"); $days = easter_days($year); return $base->add(new \DateInterval("P{$days}D")); } public function isNotHoliday(\Datetime $date) { // statni svatky $holidays = array('01-01', '05-01', '05-08', '07-05', '07-06', '09-28', '10-28', '11-17', '12-24', '12-25', '12-26'); // velikonocni pondeli $holidays[] = $this->getEasterDateTime(date('Y'))->modify('+1day')->format('m-d'); // velky patek, (pred velikonocnim pondelim) $holidays[] = $this->getEasterDateTime(date('Y'))->modify('-2day')->format('m-d'); $day = $date->format('w'); if ($day == 0 || $day == 6) return FALSE; if (in_array($date->format('m-d'), $holidays)) return FALSE; return TRUE; } function getDeliveryDate($actualDate, $dayDelay = 0) { $actualDate = new \DateTime($actualDate); $actualDate->modify("+$dayDelay day"); while (!$this->isNotHoliday($actualDate)) { $actualDate->modify('+1 day'); } return $actualDate; } Dál už to zvládneš ne? |
||
Taps Profil |
#4 · Zasláno: 18. 5. 2017, 05:40:26
Super, dekuji
|
||
Časová prodleva: 7 let
|
0