Преобразование SQL даты в привычные варианты
05 Фев 2009
Часто приходится на некоторых сайтах использовать красивое представление даты, а постоянно обработку и преобразование делать не рационально, т.е. уж слишком много кода получатеся. Ниже представляю код, который преобразует дату так как Вам надо. Вариаций можно сделать сколько вам захочется.
$months1=array(1=>'Январь',2=>'Февраль',3=>'Март',4=>'Апрель',5=>'Май',6=>'Июнь',7=>'Июль',8=>'Август',9=>'Сентябрь',10=>'Октябрь',11=>'Ноябрь',12=>'Декабрь'); $months2=array(1=>'января',2=>'февраля',3=>'марта',4=>'апреля',5=>'мая',6=>'июня',7=>'июля',8=>'августа',9=>'сентября',10=>'октября',11=>'ноября',12=>'декабря'); function Month2String($monthnum,$mode=0) { global $months1, $months2; $monthnum = (int)$monthnum; if($mode==0) return $months1[$monthnum]; if($mode==1) return $months2[$monthnum]; } function Sql2Date($datetime="0000-00-00 00:00:00",$mode=0) { $regs = array(); $ret = array(); if(preg_match('/((19|20)[0-9]{2})[- \/.](0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01]) ([01][0-9]):([0-5][0-9]):([0-5][0-9])/', $datetime,$regs)) {} elseif(preg_match('/((19|20)[0-9]{2})[- \/.](0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])/', $datetime, $regs)) {} else return 0; if(isset($regs[1]) && isset($regs[3]) && isset($regs[4])) { $ret['year'] = $regs[1]; $ret['month'] = $regs[3]; $ret['day'] = $regs[4]; } if(isset($regs[5]) && isset($regs[6]) && isset($regs[7])) { $ret['hour'] = $regs[5]; $ret['min'] = $regs[6]; $ret['sec'] = $regs[7]; } switch ($mode) { case 1: //29 июля 2007 return $ret['day'].' '.Month2String($ret['month'],1).' '.$ret['year']; case 2: //13:40 return $ret['hour'].':'.$ret['min']; case 3: //2007-Июль-29 17:40 return $ret['year'].' '.Month2String($ret['month']).' '.$ret['day'].' '.$ret['hour'].':'.$ret['min']; case 4: //29.07.07 return $ret['day'].'.'.$ret['month'].'.'.substr($ret['year'],2,2); case 5: //29.07.2007 return $ret['day'].'.'.$ret['month'].'.'.$ret['year']; case 6: //29.07.2007 13:40 return $ret['day'].'.'.$ret['month'].'.'.$ret['year'].' '.(isset($ret['hour']) && $ret['min'] ? ''.$ret['hour'].':'.$ret['min'].'' : ''); case 7: //29 июля 2007 13:55 return $ret['day'].' '.Month2String($ret['month'],1).' '.$ret['year'].' '.$ret['hour'].':'.$ret['min']; case 8: //29.07.2007 13:40 return $ret['day'].'.'.$ret['month'].'.'.$ret['year'].' / '.$ret['hour'].':'.$ret['min']; case 0: default: return $ret; } }
Спасибо !!!
Отличная функция!
мне как раз с утра пораньше лень было с регулярными выражениями шаманить!
вот только проблемма — не выводит время если оно после 20:00, щас покурю код и все будет)
в этой строчке косяк:
if(preg_match('/((19|20)[0-9]{2})[- \/.](0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01]) ([01][0-9]):([0-5][0-9]):([0-5][0-9])/', $datetime,$regs)) {}
а надо
if(preg_match('/((19|20)[0-9]{2})[- \/.](0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01]) ([0-2][0-9]):([0-5][0-9]):([0-5][0-9])/', $datetime,$regs)) {}