PHP-带日期/时间的操作

PHP-带日期/时间的操作,php,Php,我正在尝试使用最新的php函数。我想做基本的算术运算(加法,减法…)。我已经读到有各种各样的功能来做这件事 我从DateTime和date\u diff开始 <?php $time1 = new DateTime ('08:10:20'); $time2 = new DateTime ('10:02:30'); $result = date_diff($time1, $time2)->format('H:i:s'); echo $result; ?> 运行后,它

我正在尝试使用最新的php函数。我想做基本的算术运算(加法,减法…)。我已经读到有各种各样的功能来做这件事

我从DateTime和date\u diff开始

<?php

$time1 = new DateTime ('08:10:20');

$time2 = new DateTime ('10:02:30');

$result = date_diff($time1, $time2)->format('H:i:s');

echo $result;

?>

运行后,它会显示:


您能帮我一下吗?

您使用了错误的格式字符串

试一试

编辑后:

试试这个

    <?php

$time1 = new DateTime ('08:10:20');

$time2 = new DateTime ('10:02:30');

$result = date_diff($time1, $time2)->format('%h:%i:%s');

echo $result;

?>

检查此代码

<?php
$datetime1 = new DateTime('08:10:06')->format('HH:MM:SS');
$datetime2 = new DateTime('08:10:06')->format('HH:MM:SS');
$interval = $datetime1->diff($datetime2);
echo $interval->format('HH:MM:SS');
?>

date\u diff
将返回一个
DateInterval
对象。您可以读取format参数中可以使用的字符:

$result = date_diff($time1, $time2)->format('%H:%i:%s');
每个格式字符必须以百分号(%)作为前缀

试试这个,用


最好的方法是面向对象:

$time1 = DateTime::createFromFormat('H:i:s', '08:10:20');
$time2 = DateTime::createFromFormat('H:i:s', '10:02:30');

$interval = $time1->diff($time2);
echo $interval->format('%H:%i:%s'); // print 01:52:10
我强烈反对使用程序性流程:

date_diff($time1, $time2);
尽可能多地使用面向对象:

$interval = $time1->diff($time2);

我希望它能帮助使用这种
$result=$time2->diff($time1)->格式(“%h:%I:%s”)
日期差异($time1,$time2)->格式(“%h:%i:%s”)

输出

1:52:10
从:

每个格式字符的前缀必须加百分号(%)


使用此代码以秒为单位查找差异。您还可以根据需要使用它来处理日期时间参数

<?php

function secondsConverter($dateTime1,$dateTime2)
{
    $hour=abs($dateTime1['hour']-$dateTime2['hour'])*3600;
    $minutes=abs($dateTime1['minute']-$dateTime2['minute'])*60;
    $seconds=abs($dateTime1['second']-$dateTime2['second']);

   return $hour+$minutes+$seconds;
}

$dateTime1=date_parse("10:00:00.5");
$dateTime2=date_parse("11:00:00.5");
echo secondsConverter($dateTime1,$dateTime2);

?>


尝试更改
格式('HH:MM:SS')
格式('H:i:s')@Vincent G它不好用。结果:H:i:坐着工作很好!谢谢你能给我解释一下这个表达式:'DateTime::CreateFromFormat你试图从中创建日期:“08:10:20”,但是你需要定义你给出日期的格式(或者你的例子中的时间)。因此,您需要使用createFromFormat()函数并将第一个参数作为您用于提供日期或时间的格式,即:H:i:s,例如,如果您提供的日期为:30-08-2016 12:52:08,则格式为:d-m-Y H:i:s,您将使用:$time1=DateTime::createFromFormat('d-m-Y H:i:s','30-08-2016 12:52:08');很快,它就成功了!多谢各位@Dave使用strotime或date-time的最佳方法是什么?它确实很有效,回答正确,但只要可能,面向对象的方法总是被推荐而不是过程方法。我强烈反对使用程序性流程:date_diff($time1,$time2);我们应该尽可能多地使用面向对象:$interval=$time1->diff($time2);为什么?你到底在说什么?对于那些不知道过程编程和面向对象编程之间区别的人:我相信你不熟悉面向对象编程(OOP)。请阅读我在正常搜索中找到的以下文章,以澄清“过程”和“OOP”编程之间的区别,因为我没有时间解释:真的吗?你很严肃吗?我很好奇,你认为你的代码和OP的代码有什么不同吗?为什么?我已经评论过你的代码也可以工作,但是OOP比过程性的好,我发布了链接让你看看为什么。请访问它。另外,我的代码是面向对象的,而你的代码是过程性的,这就是区别。
$time1 = new DateTime ('08:10:20');

$time2 = new DateTime ('10:02:30');
$time1->format('H:i:s');
$time2->format('H:i:s');
$result = $time2->diff($time1)->format('%h:%i:%s');

echo $result;
1:52:10
$time1 = new DateTime('08:10:20');
$time2 = new DateTime('10:02:30');
$interval = $time1->diff($time2);

echo $interval->format('%h:%i:%s');
<?php

function secondsConverter($dateTime1,$dateTime2)
{
    $hour=abs($dateTime1['hour']-$dateTime2['hour'])*3600;
    $minutes=abs($dateTime1['minute']-$dateTime2['minute'])*60;
    $seconds=abs($dateTime1['second']-$dateTime2['second']);

   return $hour+$minutes+$seconds;
}

$dateTime1=date_parse("10:00:00.5");
$dateTime2=date_parse("11:00:00.5");
echo secondsConverter($dateTime1,$dateTime2);

?>