Autor Zpráva
ForestCZE
Profil
Ahoj, snažím se už nějakou dobu, ale nenapadá mě nic. Mám datum narození jako string (bohužel) v různých formátech a nemohu je předělat jednotně na DateTime object.

Příklady formátů:

2021-06-04
2021/06/04
06.04.2021
6.4.2021
6. 4. 2021

Psal to nějaký dobytek. Nicméně, pokud je ten string napsaný jako 2021-06-04, tak mi to jde přeparsovat a vypsat jako 4. 6. 2021:

{$person->dateofbirth|date: 'j. n. Y'}

Pokud ne, tak to vyhodí error, že se to nepodařilo naparsovat.

Mohu nějak zjistit, jestli se to dá naparsovat? (něco jako tryParse v C#) a pokud ano, tak bych to vypsal jako:

{$person->dateofbirth|date: 'j. n. Y'}

jinak

{$person->dateofbirth}

Díky předem za pomoc.

____________
EDIT: Sepsal jsem něco takového, ale otázka je, zda to nejde nějak lépe a jednodušeji.

{var $dateofbirth = strpos($person->dateofbirth, '-')}
{if $dateofbirth === false}
  {$person->dateofbirth}
{else}
  {$person->dateofbirth|date:'j. n. Y'}
{/if}
Keeehi
Profil
Ono je trochu problém, že některé formáty nemusí být standardní. Ale ať už je formát jakýkoli, pokud ho popíšeš, rozparsovat se dá. Použij DateTime::createFromFormat. Nadefinuj tam jeden z těch možných formátů, když to projde, ok. Když ne (vrátí se false) tak to zkus s další definicí formátu a tak dále až vyzkoušíš všechny které chceš.
N71
Profil *
Problém je spíš, že tohle není PHP, ale nějaká šablona (Latte?). Takže je vhodné dělat kontrolu v controlleru, který data šabloně předává. Pomoci by ti mohla funkce strtotime(), která má shodnou implementaci s konstruktorem objektu Date.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0