Zend framework Zend_日期本地化中的奇怪错误

Zend framework Zend_日期本地化中的奇怪错误,zend-framework,localization,zend-date,Zend Framework,Localization,Zend Date,我的小剧本有两个问题。我正在尝试创建一个使用Zend Framework 1.12.1、条令、Zend_语言环境、Zend_货币和Zend_日期的应用程序 日期: /** * Convert a date from yyyy/mm/dd formatted by the locale setting * * @param date $dbindata * @return date formatted by the locale setting */ static public func

我的小剧本有两个问题。我正在尝试创建一个使用Zend Framework 1.12.1、条令、Zend_语言环境、Zend_货币和Zend_日期的应用程序

日期:

/**
 * 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');
}
数据库需要一个Y-m-d H:i:s格式的日期,但每个用户都在自定义控制面板中设置其区域设置首选项。因此,当我从数据库中获取日期时,我必须在locale choosen中转换它

这是我的代码:

<?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/>";

?>
正如你所看到的,结果是错误的。Zend_日期混淆了月份和日期。我该如何解决这个问题

更新:

/**
 * 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');
}
此外,如果我需要保存此日期,如何将其规范化以保存在数据库中


最好的问候

通过将区域设置传递到
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
$dboutdata=“4/3/13 12:00 AM”;
$date=新的Zend_日期($dboutdata,null,“en_US”);
echo$date->toString(空,'en_US')。'
';//输出4月3日,13日12:00:00上午 echo$date->toString(null,“it_it”)。'
';//产出2013年4月3日00.00.00
通过将区域设置传递给
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
$dboutdata=“4/3/13 12:00 AM”;
$date=新的Zend_日期($dboutdata,null,“en_US”);
echo$date->toString(空,'en_US')。'
';//输出4月3日,13日12:00:00上午 echo$date->toString(null,“it_it”)。'
';//产出2013年4月3日00.00.00
你好,蒂姆,谢谢你的回复!我已经更新了这个问题,添加了你的修复程序,现在我觉得它也能正常工作。有没有办法改进这两种方法?嗨,蒂姆,谢谢你的回复!我已经更新了这个问题,添加了你的修复程序,现在我觉得它也能正常工作。有没有办法改进这两种方法?