Autor Zpráva
Kuhion
Profil *
Zdravím.
potřebuju pomoci s převodem data z:
10-2-2010 15:30:00 na 2010-02-10 15:30:00
Jde to nějak? :(
Díky
Keeehi
Profil
http://cz.php.net/manual/en/function.strftime.php
mattyZEM
Profil
Třeba substr :) http://cz.php.net/manual/en/function.substr.php
AM_
Profil
mattyZEM:
Třeba substr
nebo si to rovnou napsat v Assembleru, viď :)

Kuhion:
zkus
date('Y-m-d H:i:s', strtotime('10-2-2010 15:30:30'));

Podrobnosti o zápisu prvního parametru funkce date najdeš na http://php.net/date
Majkl578
Profil
AM:
Tam může být problém s rokem <1970. :)

Řešení pomocí reguláru a callbacku.
echo preg_replace_callback('~^(\d+)\-(\d+)\-(\d+)~', function ($m) {
	$normalize = function ($s) {
		return $s[0] !== '0' && strlen($s) === 1 ? '0' . $s : $s;
	};
	return $m[3] . '-' . $normalize($m[2]) . '-' . $normalize($m[1]);
}, '10-2-2010 15:30:00');
mattyZEM
Profil
Majkl578:
Moje řešení by bylo kratší! :D
Majkl578
Profil
mattyZEM:
Nejlepší řešení pro období 1970-2038 je to, které napsal AM_.
Tvoje řešení já nemám rád, používat několikrát substr, strpos a podobné se mi opravdu nelíbí.
mattyZEM
Profil
Majkl578:
opravdu nelíbí.
Ale bylo by kratší :)
Majkl578
Profil
mattyZEM:
Schválně to svoje řešení napiš. :)
mattyZEM
Profil
$t='10-2-2010 15:30:00';
$cas=substr($t,5,4);
$cas.=substr($t,3,1); // Tady bych ověřova přes preg_replace zda se jedná o číslo větší než 9 (stejně jako u dní)
$cas.=substr($t,0,2);
$cas.=' ';
$cas.=substr($t,-8);

Samozřejmě toto není celé (je zbytečnost to psát když to nikdo nevyužije :D) a chybí tam dost podmínek, viz #3
DJ Miky
Profil
Už teď to není o moc kratší a přidáním těch podmínek by se to ještě víc prodloužilo...

Když už přes rozsekávání řetězce, tak takhle:
$datum='10-2-2010 15:30:00';
function doplnit($str) {return str_pad($str,2,'0',STR_PAD_LEFT);}
$datum=explode(' ',$datum);
$datum=implode('-',array_map('doplnit',array_reverse(explode('-',$datum[0])))).' '.$datum[1];
AM_
Profil
mattyZEM:
ano, napsat na fórum "substr" opravdu bylo kratší. Nicméně rada kvapná málo platná, ani mě by se nechtělo rozepisovat to přes substr.
Pokud jde o současná data, tak je opravdu nejrychlejší to moje (navíc vstupní datum to spolkne v libovolném formátu); pokud ne (<1970 a >2038), tak by to šlo zapsat jedním regulárem bez callbacku (předpokládám, že je to převod do mysql formátu, takže 2010-2-10 je uspokojivý výsledek, MySQL databáze to bez úvodní nuly chápe):
preg_replace('~^(\\d+)-(\\d+)-(\\d+)~', '\\3-\\2-\\1', $datum);

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: