Форматирование даты средствами Zend_Framework и не только.

zend_framework

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

Форматирование с помощью Zend_Date.

Для быстрого форматирования даты при выводе ее пользователю я предлагаю создать помощник вида.
Для этого создаем простой viewHelper (application/view/helpers), я назвал его DateHelper:

<?php
/**
 *
 * @author Roman
 * @version
 */
require_once 'Zend/View/Interface.php';
/**
 * DateHelper helper
 *
 * @uses viewHelper Zend_View_Helper
 */
class Zend_View_Helper_DateHelper
{
    /**
     * @var Zend_View_Interface
     */
    public $view;
    /**
     *
     */
    public function dateHelper($date_value, $format)
    {
        $locale = Zend_Registry::get('Zend_Locale');
        $date = new Zend_Date($date_value, false, $locale);
        return $date->toString($format);
    }
    /**
     * Sets the view field
     * @param $view Zend_View_Interface
     */
    public function setView (Zend_View_Interface $view)
    {
        $this->view = $view;
    }
}

Теперь мы можем использовать его в view скрипте следующим образом:

$unformated_data = "2011-01-30 12:21:11";
$this->dateHelper($unformated_data, "dd MMMM"); ?>

Дата будет отформатирована в «30 January«. Для того чтобы дата выводилась с учетом локали (языка) нужно в файле Bootstrap.php добавить метод:

protected function _initLocale()
{
    $locale = new Zend_Locale('ru_RU');
    Zend_Registry::set('Zend_Locale', $locale);
}

В данном случае наш помощник вида выведет «30 января«. Модификаторы даты можно посмотреть тут.

Форматирование средствами СУБД MySQL.

Если вы получаете дату из базы, то не стоит забывать о встроенном форматировании даты в MySQL и других СУБД.

DATE_FORMAT('2011-01-30 12:21:11', '%d %M') AS FIELD_1

Функция DATE_FORMAT вернет нам «30 January«, подробнее модификаторы можно посмотреть тут