我正在使用CakePHP 3和PHP 5.6。我相信CakePHP可能在这个问题中起作用(IE,将SQL DateTime条目转换为它自己的DateTime格式。)
我有一个SQL表,其中包含一系列包含DateTime值的条目。输入如下:
2016-07-29 17:46:45
我目前没有在我的控制器中进行任何类型的解析,我只是通过$this->set()
在视图中,我可以使用CakePHP调试器查看日期显示为包含时间值,fixedNowTime值和时区值的数组。时间值显示如下:
我可以看到第二个确实包含在时间中。但是当我试图回应它时,无论我如何尝试这样做,第二个都会丢失。
我尝试了什么
以下是我尝试过的例子和输出:
1
$dateval = date_parse($adatevalue);
echo $dateval['second'];
- 根本没有输出
2
$dateval = strtotime($adatevalue);
echo date('Y-m-d H:i:s', $dateval);
输出(通知秒丢失):
2016-07-29 17:46:00
第3
$dateval = date_parse($adatevalue['time']);
echo $dateval['second'];
输出:
Cannot use object of type Cake\I18n\FrozenTime as array
尝试在控制器中执行这些操作会产生相同的结果。
答案 0 :(得分:2)
调试工具包输出有点欺骗,因为它只显示对象调试信息(__debugInfo()
),它始终是一个数组。您的日期不是数组,它们实际上是日期/时间对象,因为您显示的错误表明。
丢失的秒数是由于您尝试转换日期/时间对象。您配置的en_US
区域设置使用的日期格式模式不会输出秒数(M/d/yy, h:mm a
),因此strtotime
会收到类似7/29/16, 5:46 PM
的日期时间字符串,从而导致几秒钟就失去了。
如果要更改默认输出格式,请使用例如i18nFormat()
或format()
显式格式化输出,例如
$adatevalue->i18nFormat(\IntlDateFormatter::FULL)
$adatevalue->i18nFormat('yyyy-MM-dd HH:mm:ss')
$adatevalue->format('Y-m-d H:i:s')
或设置/更改bootstraps日期/时间类型配置中的默认输出格式,例如
\Cake\I18n\FrozenTime::setToStringFormat('yyyy-MM-dd HH:mm:ss');
另见