Php 将时间转换为字符串时丢失的秒数
我使用的是CakePHP3和PHP5.6。我相信CakePHP可能在这个问题中起了作用(即,将SQL DateTime条目转换为自己的DateTime格式) 我有一个SQL表,它有一系列包含日期时间值的条目。它们是这样输入的:Php 将时间转换为字符串时丢失的秒数,php,cakephp,Php,Cakephp,我使用的是CakePHP3和PHP5.6。我相信CakePHP可能在这个问题中起了作用(即,将SQL DateTime条目转换为自己的DateTime格式) 我有一个SQL表,它有一系列包含日期时间值的条目。它们是这样输入的: 2016-07-29 17:46:45 我目前没有在我的控制器中对这段时间进行任何类型的解析,我只是通过$this->set()将其传递给视图 在视图中,我可以使用CakePHP调试器查看日期显示为一个数组,其中包含一个时间值、一个fixedNowTime值和一个时区值
2016-07-29 17:46:45
我目前没有在我的控制器中对这段时间进行任何类型的解析,我只是通过$this->set()将其传递给视图
在视图中,我可以使用CakePHP调试器查看日期显示为一个数组,其中包含一个时间值、一个fixedNowTime值和一个时区值。时间值显示如下:
我可以看到,第二个确实包含在时间中。但当我试图呼应它时,无论我如何尝试,第二个都会丢失
我尝试过的
以下是我尝试的内容和输出的示例:
1.
$dateval = date_parse($adatevalue);
echo $dateval['second'];
$dateval = strtotime($adatevalue);
echo date('Y-m-d H:i:s', $dateval);
$dateval = date_parse($adatevalue['time']);
echo $dateval['second'];
-根本没有输出
2.
$dateval = date_parse($adatevalue);
echo $dateval['second'];
$dateval = strtotime($adatevalue);
echo date('Y-m-d H:i:s', $dateval);
$dateval = date_parse($adatevalue['time']);
echo $dateval['second'];
输出(注意第二个丢失):
3.
$dateval = date_parse($adatevalue);
echo $dateval['second'];
$dateval = strtotime($adatevalue);
echo date('Y-m-d H:i:s', $dateval);
$dateval = date_parse($adatevalue['time']);
echo $dateval['second'];
输出:
Cannot use object of type Cake\I18n\FrozenTime as array
尝试在控制器中执行这些操作会产生相同的结果。调试工具包输出有点虚假,因为它只会显示对象调试信息(),它始终是一个数组。您的日期不是数组,它们实际上是日期/时间对象,正如您显示的错误所示
丢失的秒数是由于您尝试转换日期/时间对象造成的。您配置的en_US
区域设置使用的日期格式模式不输出秒(M/d/yy,h:mm a
),因此strotime
将接收一个日期时间字符串,如7/29/16,5:46 PM
,导致秒数丢失
如果要更改默认输出格式,请使用例如i18nFormat()
或format()
之类的方法显式格式化输出
$adatevalue->i18nFormat(\IntlDateFormatter::FULL)
或者在引导日期/时间类型配置中设置/更改默认输出格式,如
\Cake\I18n\FrozenTime::setToStringFormat('yyyy-MM-dd HH:mm:ss');
另见
调试工具包的输出有点虚假,因为它只会显示对象debug info(),它始终是一个数组。您的日期不是数组,它们实际上是日期/时间对象,正如您显示的错误所示
丢失的秒数是由于您尝试转换日期/时间对象造成的。您配置的
en_US
区域设置使用的日期格式模式不输出秒(M/d/yy,h:mm a
),因此strotime
将接收一个日期时间字符串,如7/29/16,5:46 PM
,导致秒数丢失
如果要更改默认输出格式,请使用例如i18nFormat()
或format()
之类的方法显式格式化输出
$adatevalue->i18nFormat(\IntlDateFormatter::FULL)
或者在引导日期/时间类型配置中设置/更改默认输出格式,如
\Cake\I18n\FrozenTime::setToStringFormat('yyyy-MM-dd HH:mm:ss');
另见
调试工具包的输出有点虚假,因为它只会显示对象调试信息(\uu debugInfo()
),它始终是一个数组。您的日期不是数组,它们实际上是日期/时间对象,正如您显示的错误所示。也就是说,你是说即使是echo$adatevalue
也会输出45
为00
?谢谢@ndm提供的信息echo$adatevalue
将输出7/29/16,下午5:46
。那么$adatevalue->i18nFormat(\IntlDateFormatter::FULL)
或者$adatevalue->format('h:i:s')
呢?是的,这正是我所希望的。创建一个答案,我会接受它。调试工具包的输出有点欺骗性,因为它只会显示对象调试信息(\uu debugInfo()
),它始终是一个数组。您的日期不是数组,它们实际上是日期/时间对象,正如您显示的错误所示。也就是说,你是说即使是echo$adatevalue
也会输出45
为00
?谢谢@ndm提供的信息echo$adatevalue
将输出7/29/16,下午5:46
。那么$adatevalue->i18nFormat(\IntlDateFormatter::FULL)
或者$adatevalue->format('h:i:s')
呢?是的,这正是我所希望的。创建一个答案,我会接受它。