Autor | Zpráva | ||
---|---|---|---|
jiricz Profil |
Zdravím,
předem se omlouvám, jestli se to zde již řešilo, ale hledal jsem a nenašel:) Potřeboval bych poradit jak nejefektivněji vytvořit funkci která mi vypíše datum vzestupně, například každého úterý a pátku v daném měsíci. Stačilo by mě kdyby funkce uměla vypsat unixový čas, který bych si už na datum naformátoval. Mám toto, ale potřebuji to tedy ještě nějak opodmínkovat: $t = time(); $m = date('m',$t); $r = date('Y',$t); $number = cal_days_in_month(CAL_GREGORIAN, $m, $r); $this_day = $t; for ($i = 0; $i < $number; $i++) { $ukaz = date("d.m.Y", $this_day); echo'<p>'.$ukaz.'</p>'; } |
||
Keeehi Profil |
#2 · Zasláno: 4. 3. 2018, 20:47:02
function datesOfDaysInMonth($daysInWeek, $time = null, $format = 'd.m.Y') { if(!is_string($format)) { return false; } if($time === null) { $time = time(); } if(!is_numeric($time)) { return false; } $time = (int)$time; if(is_numeric($daysInWeek)) { $daysInWeek = [(string)((int)$daysInWeek)]; } if(!is_array($daysInWeek)) { return false; } $daysInWeek = array_unique(array_values($daysInWeek)); for($i = 0; $i < count($daysInWeek); $i++) { if(!is_numeric($daysInWeek[$i])) { return false; } $daysInWeek[$i] = (int)$daysInWeek[$i]; if($daysInWeek[$i] < 1 || $daysInWeek[$i] > 7) { return false; } } $month = date('m', $time); $year = date('Y', $time); $days = cal_days_in_month(CAL_GREGORIAN, $month, $year); $result = []; for ($i = 1; $i <= $days; $i++) { $date = DateTime::createFromFormat('j.m.Y', "$i.$month.$year"); if(in_array($date->format('N'), $daysInWeek, true)) { $result[] = $date->format($format); } } return $result; } Jako první parametr to bere číslo nebo string dne v týdnu (1 pondělí - 7 neděle), případně pole takových hodnot. Jako druhý dobrovolný parametr to bere timestamp ze kterého to určí příslušný rok a měsíc. Pokud neuvede druhý parametr zadán, vezme se aktuální měsíc a rok. Třetí nepovinný parametr určuje formát výstupu. Pokud je nějaký vstup špatně, funkce vrátí false (v ideálním případě by měla vyhodit výjimku a říct co je špatně) jinak vrátí pole s daty v daném formátu. Funkce je tak dlouhá, jelikož ověřuje validitu vstupů. Pokud bychom předpokládali, že vstupy budou validní, pak by mohla vypadat takto. function datesOfDaysInMonth($daysInWeek, $time = null, $format = 'd.m.Y') { if($time === null) { $time = time(); } $month = date('m', $time); $year = date('Y', $time); $days = cal_days_in_month(CAL_GREGORIAN, $month, $year); $result = []; for ($i = 1; $i <= $days; $i++) { $date = DateTime::createFromFormat('j.m.Y', "$i.$month.$year"); if(in_array($date->format('N'), $daysInWeek, true)) { $result[] = $date->format($format); } } return $result; } |
||
jiricz Profil |
#3 · Zasláno: 6. 3. 2018, 09:28:54
Děkuji, přesně tak jsem to potřeboval.
|
||
Časová prodleva: 6 let
|
0