Преобразование SQL даты в PHP дату

Эта записка о частой необходимости программиста, создающего сайты. Все выглядит так: в базе данных тип DATE, который в РНР выглядит как обычная строка “2011-06-13”. Наша цель преобразовать эту дату в формат, пригодный для использования функцией date(). А с помощью этой функций мы сможем получить все что угодно:

  • день
  • месяц буквами (полный, 3 буквы)
  • год
  • високосный год?
  • день недели
  • номер месяца

Все настолько просто

$phpdate = strtotime( $mysqldate );

Используем так

$pattMonth = ‘M’;
$pattDay = ‘j’;
$pattYear = ‘Y’;
$phpdate = strtotime($sqlDate);
$day = date($pattDay, $phpdate);
$mon = date($pattMonth, $phpdate);
$year = date($pattYear, $phpdate);

Реальный пример, как получить дату вида 27 декабря, 2011

$phpdate = strtotime($date);
$day = date(‘j’, $phpdate); // day
$mon = getRusDate(date(‘M’, $phpdate)); // month
$year = date(‘Y’, $phpdate); //year 2011
$tdate = “$day $mon, $year”;
echo $tdate;

На всякий случай код для обратного действия – записи из РНР в базу данных

$mysqldate = date( ‘Y-m-d’, $phpdate );
$mysqldatetime = date( ‘Y-m-d H:i:s’, $phpdate );

Получение полной временной метки

$mysqldate = $arrayData[$id][‘date’].’ ‘.$arrayData[$id][‘time’];
$phpdate = strtotime($mysqldate);
$need = date(‘r’, $phpdate);

На входе у нас “2011-04-29 02:54:00”, на выходе “Thu, 14 Jul 2011 22:14:00 +0400”. Это живой пример для RSS.

Вывод в списке категорий, так называемый roster или lister

Для передачи данных используем функцию:

$D[‘materials’] = $this->data->getMaterialsByCategory($category, $neededMaterialsCount, $start);

Для вывода используем код по образцу:

$m = $materials;
if (is_array($m)) foreach ($m[‘idS’] as $id)
{
$image_properties = array(
‘src’ => $m[$id][‘imgSrc’],
‘alt’ => $m[$id][‘imgAlt’],
‘width’ => ‘140’,
‘height’ => ‘140’,
‘title’ => $m[$id][‘imgTitle’]
);

echo’

‘;
}
echo $paging;
?>

$paging выведет постраничную навигацию, согласно тем настройкам, которые в контроллере.

А теперь посмотрим более оптимизированный код, и выводящий зоны. Зоны это когда нужно допустим вывести список новостей в 2 разных блока, в каждый допустим по 15. В первый блок будем выводить с 0 элемента по 14, во второй с 14 по 29. Показан код только для второго блока:

$start = 14;
$end = 29;
$counter = 0;
if (is_array($m)) foreach ($m[‘idS’] as $id)
{
$counter++;
if (!(($counter > $start) AND ($counter < $end))) continue;
$row = $m[$id];
$image_properties = array(
‘src’ => $row[‘bigImgSrc’],
‘alt’ => $row[‘imgAlt’],
‘width’ => ‘160’,
‘height’ => ‘120’,
‘title’ => $row[‘imgTitle’]
);
$phpdate = strtotime($row[‘date’]);
$day = date(‘j’, $phpdate); // day
$mon = getRusDate(date(‘M’, $phpdate)); // month
$year = date(‘Y’, $phpdate); //year 2011
$tdate = “$day $mon, $year”;
echo ‘

‘.character_limiter(cleanText($row[‘body’]),480).’

‘;
}