Php 将时间转换为字符串时丢失的秒数

Php 将时间转换为字符串时丢失的秒数,php,cakephp,Php,Cakephp,我使用的是CakePHP3和PHP5.6。我相信CakePHP可能在这个问题中起了作用(即,将SQL DateTime条目转换为自己的DateTime格式) 我有一个SQL表,它有一系列包含日期时间值的条目。它们是这样输入的: 2016-07-29 17:46:45 我目前没有在我的控制器中对这段时间进行任何类型的解析,我只是通过$this->set()将其传递给视图 在视图中,我可以使用CakePHP调试器查看日期显示为一个数组,其中包含一个时间值、一个fixedNowTime值和一个时区值

我使用的是CakePHP3和PHP5.6。我相信CakePHP可能在这个问题中起了作用(即,将SQL DateTime条目转换为自己的DateTime格式)

我有一个SQL表,它有一系列包含日期时间值的条目。它们是这样输入的:

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')
      呢?是的,这正是我所希望的。创建一个答案,我会接受它。