Autor Zpráva
Vanama
Profil
Ahoj,
potřeboval bych rozdělit datum a čas, ale nějak nevím jak na to. Resp. nevím, který příkaz k tomu požít.
Datum může být bohužel v jakýmkoliv formátu. U času se předpokládá, že bude mít formát hh:mm a případně ještě :ss. Může se taky stát, že tam bude am či pm.

vstupní hodnota bude např. 10.duben 2011 v 13:45:12.
výstupní by měla být array('10.duben 2011', '13:45:12')

Úplně ideální by byl nějaký univerzální skript, který to vše převede do mysql formátu.
Skript na to sice mám, ale musím pracovat jak s datem tak i časem nehledě na to, že mezi tím nebo klidně i za tím může být něco co nemá s datumem nic společného.
Proto bych si to radši rozděli a potom pracoval jen s datem.

Díky za rady
Tori
Profil
Vanama:
U času se předpokládá, že bude mít formát hh:mm
Takže regulár:
\d{2}:\d{2}(?:\d{2})?

Datum může být bohužel v jakýmkoliv formátu
Tak si ty formáty napište pod sebe a najděte společné prvky - např. měsíc je vždy slovem nebo může být i číslo? Pokud se dá spolehnout na to, že rok bude vždy čtyřciferný, tak se můžete chytit toho:
// dvě skupiny znaků před čtyřmístným číslem
(\d{2})[. ]+?(\d{2}|[^ ]+?)[. ]+?(\d{4})
Vanama
Profil
To jo, já to pro čas mám takhle (nevím co je lepší)

([0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?)


Ale jakým příkazem to vytáhnu? Myslím jen čas a datum zvlášť. preg_replace asi ne.
Na ten datum se nemůžu spolehnout na nic. Může to být klidně i bez roku nebo tam místo data může být třeba "dnes"
Tori
Profil
preg_match
Rozdíl je jen v tom, že já jsem hledala pouze dvojmístná čísla a tento regulár umožňuje i jednomístná.
Vanama
Profil
Aha, tak jsem to špatně používal.

Takhle to funguje

preg_match('/([0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?)/', $date, $time);
echo $time[0]


Díky moc

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