Странная ошибка в локализации Zend_Date

У меня есть две проблемы в моем маленьком сценарии. Я пытаюсь создать приложение, которое использует Zend Framework 1.12.1, Doctrine, Zend_locale, Zend_Currency и Zend_Date.

Даты проведения :

Для базы данных требуется дата в этом формате Ymd H:i:s, но каждый пользователь устанавливает свои языковые настройки в пользовательской панели управления. Поэтому, когда я получаю дату из базы данных, мне нужно преобразовать ее в выбранную локаль.

Это мой код:

<?php

     $dboutdata = "4/3/13 12:00 AM"; // 4 March 2013 12:00 AM

     $date = new Zend_Date($dboutdata, null, "en_US");
     echo $date . "<br/>";

     $date = new Zend_Date($dboutdata, null, "it_IT");
     echo $date . "<br/>";

?>

это результат:

Apr 3, 13 12:00:00 AM
04/mar/13 12.00.00

Как видите, результат неверный. Zend_Date путает месяц с днем. Как мне решить эту проблему?

обновления:

/**
 * Convert a date from yyyy/mm/dd formatted by the locale setting
 *
 * @param date $dbindata
 * @return date formatted by the locale setting
 */
static public function formatDateOut($dbindata) {
    if (empty ( $dbindata ))
        return false;

    $locale = Zend_Registry::get('Zend_Locale');
    $date = new Zend_Date($dbindata, "yyyy-MM-dd HH:mm:ss", $locale);

    return $date->toString(Zend_Date::DATETIME_SHORT, $locale);
}

/**
 * Convert a date from Zend Locale selected to yyyy/mm/dd H:i:s
 *
 * @param string $dboutdata
 * @return string Y-m-d H:i:s
 */
static public function formatDateIn($dboutdata) {
    if (empty ( $dboutdata ))
        return null;

    $InDb = null;

    $locale = Zend_Registry::get('Zend_Locale');
    $date = new Zend_Date($dboutdata);

    return $date->toString('yyyy-MM-dd HH:mm:ss');
}

Кроме того, если мне нужно сохранить эту дату, как я могу ее нормализовать, чтобы сохранить ее в базе данных?

С уважением

1 ответ

Передавая локаль в Zend_Date конструктор, вы говорите, в каком формате находится дата. В американском формате даты сначала указывается месяц, а в европейском формате даты - день, поэтому вы получаете разные результаты.

Вы, вероятно, просто хотите установить локаль при выводе даты, например:

$dboutdata = "4/3/13 12:00 AM";
$date = new Zend_Date($dboutdata, null, "en_US");

echo $date->toString(null, 'en_US') . '<br>'; // outputs Apr 3, 13 12:00:00 AM
echo $date->toString(null, 'it_IT') . '<br>'; // outputs 03/apr/13 00.00.00
Другие вопросы по тегам