Zadejte hledaný výraz...

PHP – datum od do

mcever4
verified
rating uzivatele
27. 10. 2020 08:47:03
Ahoj, mozek mi už neslouží tak prosím o pomoc nebo nasměrování.
mám inputy type date, jeden datum_od a druhy datum_do
v PHP potřebuji cyklus který mi vypíše datumy po dnech mezi datem od do data do
s ochranou pokud je dnů více než 30 a nebo pokud je datum do menší než datum od.
Příklad 1:
datum od : 2020-09-29
datum do : 2020-10-02
cyklus vypíše :
2020-09-29
2020-09-30
2020-09-01
2020-09-02
Příklad 1:
datum od : 2020-10-02
datum do : 2020-10-02
cyklus vypíše :
2020-09-29
sice jsem to naprogramoval pomocí
$den=date("Y-m-d", strtotime("-$i days"));
ale myslím si, že by to šlo možná lépe. Poradíte mi jak na to?
27. 10. 2020 08:47:03
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467109
Otakar Pěnkava
verified
rating uzivatele
(25 hodnocení)
27. 10. 2020 08:52:05
Příklad 1 a 2 nedává smysl, ne? Resp. to co cyklus vypíše...
27. 10. 2020 08:52:05
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467108
hm
verified
rating uzivatele
(20 hodnocení)
27. 10. 2020 09:37:52
udelals to spravne, vubec netusim proc bys to chtel delat jinak, kdyz mas tak dokonalou fci na datum jako je strtotime se kterou jde zvladnout vetsinu totalnich zaludnosti na jedinej radek...
27. 10. 2020 09:37:52
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467107
mcever4
verified
rating uzivatele
27. 10. 2020 20:37:02
Napsal Whispere;1602077
Příklad 1 a 2 nedává smysl, ne? Resp. to co cyklus vypíše...
ano, mělo to vypsat 2020-10-02, sorry
27. 10. 2020 20:37:02
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467106
Tomáš Faldyna
verified
rating uzivatele
(54 hodnocení)
28. 10. 2020 08:49:02
Jdes spravnym smerem, ted to jen dat dohromady ... treba takhle
$first = '2020-07-29';
$last = '2020-10-02';
$curr = strtotime($first);
$last = strtotime($last);
if( $curr > $last ) {
$dates[] = date('Y-m-d', $curr);
}
else {
while( $curr <= $last ) {
$dates[] = date('Y-m-d', $curr);
$curr = strtotime('+1 day', $curr);
if( count( $dates ) == 30 ) break;
}
}
print_r($dates);
28. 10. 2020 08:49:02
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467105
hm
verified
rating uzivatele
(20 hodnocení)
28. 10. 2020 09:21:08
Nejsou tam ty podminky uplne zbytecne?
$first = '2020-07-29';
$last = '2020-10-02';
$curr = strtotime($first);
$last = strtotime($last);
do {
$dates[] = date('Y-m-d', $curr);
$curr = strtotime('+1 day', $curr);
} while( $curr <= $last && count($dates) < 30);
print_r($dates);
28. 10. 2020 09:21:08
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467104
crs
verified
rating uzivatele
(1 hodnocení)
28. 10. 2020 21:43:11
...&& count($dates) <= 30);
28. 10. 2020 21:43:11
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467103
hm
verified
rating uzivatele
(20 hodnocení)
28. 10. 2020 21:46:50
Napsal crs;1602294
...&& count($dates) <= 30);
ne... schvalne jestli ti dojde proc ;)
28. 10. 2020 21:46:50
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467102
TomasX
verified
rating uzivatele
(4 hodnocení)
28. 10. 2020 23:12:11
php od verze 5.3 na to má poměrně pěkné funkce DateTime a DatePeriod, kde je ošetřeno jako překrývající datum, tak i neplatné datumy, je pak možné vše ošetřit a správně informoval návštěvníka.
$maxDays = 30;
try {
$startDate = new DateTime('2020-09-29');
} catch(Exception $e) {
print_r("Neplatný datum od");
return;
}
try {
$endDate = new DateTime('2020-10-02');
} catch(Exception $e) {
print_r("Neplatný datum do");
return;
}
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($startDate, $interval, $endDate->modify("+1 day"));
if (iterator_count($period) > $maxDays) {
print_r("Příliš dlouhý interval");
return;
}
if (iterator_count($period) === 0) {
print_r("Datumy se nepřekrývají");
return;
}
foreach ($period as $date) {
print_r($date->format("Ymd")."n");
}
winexec: pokud je počáteční datum novější a konečné starší, vypíšeš počáteční, řekl bych, že bys neměl vypsat nic
Aleš: nemáš ošetřené, pokud počáteční datum je novější, stejně jako winexec
Když jsem tady viděl odpovědi, tak už jsem nechtěl reagovat a až teď si všímám, že jsou vlastně nevhodně.
Pro čitelnost mohu vynechat všechny kontroly vstupu, aby bylo lépe vidět samotné použití funkcí
$startDate = new DateTime('2020-09-29');
$endDate = new DateTime('2020-10-02');
$maxDays = 30;
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($startDate, $interval, $endDate->modify("+1 day"));
foreach ($period as $date) {
print_r($date->format("Ymd")."n");
}
28. 10. 2020 23:12:11
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467101
hm
verified
rating uzivatele
(20 hodnocení)
28. 10. 2020 23:23:37
Njn nechtel jsem venovat tolik casu něčemu co nekdo nekam.nalepi a bude rad ze to funguje.
Bod pro tebe, trochu se bojim ze to tady bude nedoceneno.
28. 10. 2020 23:23:37
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467100
TomasX
verified
rating uzivatele
(4 hodnocení)
28. 10. 2020 23:29:11
já také ne, ale když jsem viděl chybný kód, nemohl jsem to tak nechal, profesní deformace. Kdyby to náhodou tazatel nevyužil, třeba to příjde užitečné někomu dalšímu. strtotime je strašně přeceňovaná funkce, pokusí se převést na datum i očividné nesmysly, vrací false, když se jí to opravdu nelíbí, vzniká pak zbytečně řada chyb (i bezpečnostních) v programech. Při penetračních testech to je jedno z hlavních míst, kde zkouším aplikaci dostat do kolen nebo do pro mě vhodného stavu.
28. 10. 2020 23:29:11
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467099
hm
verified
rating uzivatele
(20 hodnocení)
28. 10. 2020 23:39:27
Strtotime nebo jeji obdoba v datetime je uplne genialni, jen se musi vic hlídat kdyz do toho ma jit uzivatelsky vstup :) nezatracoval bych to...
Ale tak ja uz u PHP nemam zadnou autoritu, uz par let sem v nem realne nic nedelal, max malou udrzbu starych kodu..
28. 10. 2020 23:39:27
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467098
TomasX
verified
rating uzivatele
(4 hodnocení)
28. 10. 2020 23:45:26
Datetime vyhodí aspoň exception a program většinou zastaví, strtotime vyhodí false a pak se klidně nechá magicky přetypovat na int či porovnávat s čímkoliv. V PHP aktivně nedělám, jen občas nějaké code review či penetrace, přeci jen v php je napsané ledacos a z pohledu zabezpečení to je zrovna systém, který je v přední línii.
28. 10. 2020 23:45:26
https://webtrh.cz/diskuse/php-datum-od-do/#reply1467097
Pro odpověď se přihlašte.
Přihlásit