2013-03-04 3 views
1

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

Дата:

В базе данных необходима дата в этом формате Y-M-D 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 
+0

Привет Тим, спасибо за ответ! Я обновил вопрос, добавив ваше исправление, и теперь мне кажется, что он работает. Есть ли способ улучшить эти два метода? – Michelangelo

Смежные вопросы