第二个在将时间转换为字符串时丢失

时间:2016-08-01 13:13:15

标签: php cakephp

我正在使用CakePHP 3和PHP 5.6。我相信CakePHP可能在这个问题中起作用(IE,将SQL DateTime条目转换为它自己的DateTime格式。)

我有一个SQL表,其中包含一系列包含DateTime值的条目。输入如下:

2016-07-29 17:46:45

我目前没有在我的控制器中进行任何类型的解析,我只是通过$this->set()

将其传递给视图

在视图中,我可以使用CakePHP调试器查看日期显示为包含时间值,fixedNowTime值和时区值的数组。时间值显示如下:

enter image description here

我可以看到第二个确实包含在时间中。但是当我试图回应它时,无论我如何尝试这样做,第二个都会丢失。

我尝试了什么

以下是我尝试过的例子和输出:

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 

尝试在控制器中执行这些操作会产生相同的结果。

1 个答案:

答案 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');

另见