formatovani dateinterval v latte

vbelco
Člen | 7
+
0
-

Zdravim, preliezom som forum ale nepodarilo sa mi najst ako formatovat v latte objekt DateInterval
Helpery a formatovani v latte som nasiel vo vztahu k DateTime objektu. Na objekt typu DateInterval mi nefungovali.
Skusal som aj {php $foo->format(„%d.%i“)} ale nevypisuje nic.

Ondřej Kubíček
Člen | 494
+
0
-

{php $foo->format('%d.%i')} ti nemůže nic vypsat, protože tohle makro spouští php, takže bys tam musel napsat ještě echo
nicméně tohle {$foo->format('%d.%i')} ti musí normálně fungovat

vbelco
Člen | 7
+
0
-

jaj fakt. No som to ja… Vdaka moc.
A ide to aj nejakym latte-oidnym sposobom?
V tabulke vypisujem 3 udaje: prichod, odchod a cas. Prve dva udaje su DateTime a treti DateInterval.
Prve dva udaje vypisujem cez filtre a treti musim cez php. Rad by som to zjednotil. Da sa to?
Priklad:
<td>{$post2[‚prichod‘]|date:„d. m. Y G:i:s“}</td> {*prichod formatovany cez latte filter *}
<td>{$post2[‚odchod‘]|date:„d. m. Y G:i:s“}</td> {*odchod formatovany cez latte filter *}
<td>{php echo $post2[‚cas_v_praci‘]->format(„%d. %i“) }</td> {*cas formatovany cez php*}

nightfish
Člen | 472
+
+1
-

vbelco napsal(a):
Prve dva udaje vypisujem cez filtre a treti musim cez php. Rad by som to zjednotil. Da sa to?

Tohle nefunguje?

{$post2['cas_v_praci']|date:'%h:%I'}
factor
Člen | 28
+
+1
-

Nightfish byl rychlejší, ale i tak

Příprava dat (presenter)

public function renderDefault()
{
    $dochazka    = new ArrayHash();
    $dochazka[0] = new ArrayHash();
    $dochazka[0]->prichod  = new DateTime('7.6.2018 8:00');
    $dochazka[0]->odchod   = new DateTime('7.6.2018 17:30');
    $dochazka[0]->vPraci   = $dochazka[0]->odchod->diff($dochazka[0]->prichod);

    $dochazka[1] = new ArrayHash();
    $dochazka[1]->prichod  = new DateTime('8.6.2018 8:15');
    $dochazka[1]->odchod   = new DateTime('8.6.2018 17:30');
    $dochazka[1]->vPraci   = $dochazka[1]->odchod->diff($dochazka[1]->prichod);

    $dochazka[2] = new ArrayHash();
    $dochazka[2]->prichod  = new DateTime('9.6.2018 9:00');
    $dochazka[2]->odchod   = new DateTime('9.6.2018 16:12');
    $dochazka[2]->vPraci   = $dochazka[2]->odchod->diff($dochazka[2]->prichod);

    $this->template->dochazka = $dochazka;
}

Šablona

<table class="table table-bordered table-hover table-striped">
    <thead>
    <tr>
        <th>Datum</th>
        <th>Příchod</th>
        <th>Odchod</th>
        <th>Čas v práci</th>
    </tr>
    </thead>
    <tbody>
        <tr n:foreach="$dochazka as $row">
            <th>{$row->prichod|date:'%d.%m'}</th>
            <td>{$row->prichod|date:'%H:%M'}</td>
            <td>{$row->odchod|date:'%H:%M'}</td>
            <td>{$row->vPraci|date:'%h:%i'}</td>
        </tr>
    </tbody>
</table>

Update: Pozor, při použití filteru date na proměnnou ve formátu interval musíš použít strftime zápis

Editoval factor (8. 6. 2018 9:42)

vbelco
Člen | 7
+
0
-

diky moc obom

nightfish
Člen | 472
+
0
-

@factor napsal(a):
Update: Pozor, při použití filteru date na proměnnou ve formátu interval musíš použít strftime zápis

Pozor, tohle není pravda. strftime() používá jiné modifikátory než DateInterval::format(). Třeba %I ve strftime() jsou hodiny (1–12), zatímco v DI::format() to znamená minuty (01–59). A aby se odlišil DateTime::format(), tak ten neuvozuje jednotlivé znaky formátovacího řetězce znakem procenta.

Ukázka rozdílů: https://3v4l.org/1WLVk