Главная > Заметки > Преобразование SQL даты в привычные варианты

Преобразование SQL даты в привычные варианты

Часто приходится на некоторых сайтах использовать красивое представление даты, а постоянно обработку и преобразование делать не рационально, т.е. уж слишком много кода получатеся. Ниже представляю код, который преобразует дату так как Вам надо. Вариаций можно сделать сколько вам захочется.

$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;
		}
	}

Заметки ,

  1. Leech
    16 Фев 2009 из 11:49 | #1

    Спасибо !!!

  2. Senpay
    04 Сен 2009 из 11:27 | #2

    Отличная функция!

    мне как раз с утра пораньше лень было с регулярными выражениями шаманить!

  3. Senpay
    04 Сен 2009 из 11:43 | #3

    вот только проблемма — не выводит время если оно после 20:00, щас покурю код и все будет)

  4. Senpay
    04 Сен 2009 из 11:49 | #4

    в этой строчке косяк:

    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)) {}

  1. Трекбеков пока нет.