我的小脚本中有两个问题。我正在尝试创建一个使用Zend Framework 1.12.1,Doctrine,Zend_locale,Zend_Currency和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');
}
此外,如果我需要保存此日期,我如何将其标准化以便将其保存在数据库中?
最好的问候
答案 0 :(得分: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