1

我的小脚本中有两个问题。我正在尝试创建一个使用 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');
}

此外,如果我需要保存此日期,我该如何对其进行规范化以便将其保存在数据库中?

此致

4

1 回答 1

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
于 2013-03-04T19:08:24.830 回答