Zjištění počtu dnů mezi dvěma datumy
- Webster.K
- Člen | 211
Zdravím všechny, řeším takovou zapeklitou věc a mé myšlenkové pochody na to nestačí a přijde mi, že vyrábím ohýbák na napínák. Z databáze získávám datum (jde o datum kdy auto půjde na STK, resp kdy mu končí). Toto datum vidím v šabloně a je správně. Hodilo by se mi vypsat třeba do závorky za to, kolik dní ještě zbývá, ale potřeboval bych nakopnout na správnou cestu. Dělat výpočet v Latte mi přijde jako nesmysl. Napadá mě udělat nějakou funkci Latte, kam to datum dám a ona vrátí počet dnů, ale abych se přiznal, vůbec netuším, jak něco takového provést. Nebo udělat filtr který hodnotu bude měnit? Něco ve stylu:
<p>STK: {$car->stk} {$cat->stk|mujFiltr}
představa by bylo, aby výpis vypadal takto:
STK: 2024-08-01 (20 dnů)
Do BasePresenteru jsem do funkce beforeRender přidal:
$this->template->addFilter('stk', function ($obsah) {
nějaký obsah
}
Což mi funguje, ale nějak mi nedochází ten výpočet dní
Editoval Webster.K (5. 7. 18:50)
- nightfish
- Člen | 516
@WebsterK Funkce date_diff() (DateTimeInterface::diff()
) ti
vrátí DateInterval
, který má property $days
,
obsahující počet dnů mezi dvěma datumy.
Editoval nightfish (5. 7. 18:59)
- Webster.K
- Člen | 211
Tak nevim jestli jsem to udělal vyloženě správně, ale výsledkem je tahle funkce:
$this->template->addFilter('stk', function ($obsah) {
Debugger::barDump(date('Y-m-d',$this->aktualniDatum));
Debugger::barDump($obsah->format('Y-m-d'));
$origin = date_create(date('Y-m-d',$this->aktualniDatum));
$target = date_create($obsah->format('Y-m-d'));
$interval = date_diff($origin, $target);
return "(" . $interval->format('%R%a days') . ")";
});
A vypadá, že to dělá to co potřebuju :) ještě to trochu upravím. Děkuji
- Infanticide0
- Člen | 103
Takže řešením je vzít objekt DateTime, přeměnit ho na string a ten přeměnit zpátky na DateTime?
$interval = $this->aktualniDatum->diff($obsah).
- Vůbec si nekaž život tim procedurálním PHP.
- Název toho filtru je zbytečně specifickej, přitom dělá docela obecnou činnost, vrací “daysLeft”.
- Název parametru filtru je
$obsah
, co to je? Proč ne$date
a dat. typ. $this->aktualniDatum
je vždy “dnes”? Asi nepočítáš diffy u statisíců aut na stránce, a(new DateTime)->diff()
bude víc odstíněný od Presenteru.