Php 之间经过的时间

Php 之间经过的时间,php,datetime,Php,Datetime,我被发送了两个日期时间字符串 $StartDateTime = '2012-12-25T23:00:43.29'; $EndDateTime = '2012-12-26T06:50:43.29'; 我需要执行一个timediff来生成经过的时间,并将日期组件分配给一列,将时间组件分配给另一列。我现在做的是: $d1 = new DateTime(); $d2 = new DateTime(); list($year,$month,$day) = explode('-',mb_strstr($

我被发送了两个日期时间字符串

$StartDateTime = '2012-12-25T23:00:43.29';
$EndDateTime = '2012-12-26T06:50:43.29';
我需要执行一个timediff来生成经过的时间,并将日期组件分配给一列,将时间组件分配给另一列。我现在做的是:

$d1 = new DateTime();
$d2 = new DateTime();

list($year,$month,$day) = explode('-',mb_strstr($StartDateTime,'T', TRUE));
list($hour,$minute,$second) = explode(':',trim(mb_strstr($StartDateTime,'T', FALSE),'T'));
$d1->setDate($year,$month,$day);
$d1->setTime($hour,$minute,$second);
list($year,$month,$day) = explode('-',mb_strstr($EndDateTime,'T', TRUE));
list($hour,$minute,$second) = explode(':',trim(mb_strstr($EndDateTime,'T', FALSE),'T'));
$d2->setDate($year,$month,$day);
$d2->setTime($hour,$minute,$second);

$diff = $d1->diff($d2);
现在,我可以用任何格式获得$diff:

$thisformat = $diff->format('%H:%I:%S');
$thatformat = $diff->format('%H%I%S');
并且,我可以使用以下方法将单独的日期和时间组件转换为各自的对象属性(均为字符串):

继续思考应该有更容易转换这些字符串的方法,而不是每次都进行解析。这就是我的问题。如何才能更轻松地完成此操作?

按照建议使用使其非常简单:-

$StartDateTime = \DateTime::createFromFormat("Y-m-d\TH:i:s.u", '2012-12-25T23:00:43.29');
$EndDateTime = \DateTime::createFromFormat("Y-m-d\TH:i:s.u", '2012-12-26T06:50:43.29');

var_dump($StartDateTime->diff($EndDateTime));
提供以下输出:-

object(DateInterval)[3]
  public 'y' => int 0
  public 'm' => int 0
  public 'd' => int 0
  public 'h' => int 7
  public 'i' => int 50
  public 's' => int 0
  public 'invert' => int 0
  public 'days' => int 0
按照建议使用使其非常简单:-

$StartDateTime = \DateTime::createFromFormat("Y-m-d\TH:i:s.u", '2012-12-25T23:00:43.29');
$EndDateTime = \DateTime::createFromFormat("Y-m-d\TH:i:s.u", '2012-12-26T06:50:43.29');

var_dump($StartDateTime->diff($EndDateTime));
提供以下输出:-

object(DateInterval)[3]
  public 'y' => int 0
  public 'm' => int 0
  public 'd' => int 0
  public 'h' => int 7
  public 'i' => int 50
  public 's' => int 0
  public 'invert' => int 0
  public 'days' => int 0

您不需要任何日期时间解析,因为您的输入格式是标准SOAP格式

您只需执行以下操作:

$d1 = new DateTime('2012-12-25T23:00:43.29');

您不需要任何日期时间解析,因为您的输入格式是标准的SOAP格式

您只需执行以下操作:

$d1 = new DateTime('2012-12-25T23:00:43.29');

查看
createFromFormat
:查看
createFromFormat