2016-11-04 52 views
1

我正在尝试使用日期/时间php函数。我想做基本的算术运算(加法,减法......)。我已经读过,有各种功能可以做到这一点。PHP - 使用日期/时间的操作

我以DateTime和date_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; 

?> 

后运行它,它显示:

enter image description here

请你能帮我吗?

+0

试图改变'格式( 'HH:MM:SS');''到格式( 'H:I:S');' –

+0

@Vincentģ它不很好地工作。结果:H:我:s – ruzD

回答

3

的最佳方式将是面向对象:

$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); 

我希望它能帮助

+0

它工作正常!谢谢!你能解释我的表达式:'DateTime :: createFromFormat – ruzD

+0

你试图创建日期从:“08:10:20”,但你需要定义在哪种格式你给日期(或在你的情况下的时间)。所以你需要使用createFromFormat()函数,并给出第一个参数作为你用来给你的日期或时间的格式,例如:H:i:s, 例如,如果你给日期,例如:30-08-2016 12:52:08,你的格式是:dmY H:i:s,你会使用: $ time1 = DateTime :: createFromFormat('dmY H:i:s','30 -08-2016 12:52 :08' );等等。 – Learner

1

你正在使用错误的格式字符串

尝试

format('H:i:s') 

编辑后:

试试这个

<?php 

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

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

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

echo $result; 

?> 
+0

试试这个@ruzD ....现在它的工作 –

+0

现在是,它的工作原理! – ruzD

0

检查这个代码

<?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'); 
?> 
+0

同样的错误结果:( – ruzD

2

date_diff将返回一个DateInterval对象。你可以阅读here,你可以格式参数中使用的字符:

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

每个格式字符必须由一个百分号(%)前缀。

+0

它确实有效并且正确的答案,但是总是推荐使用面向对象的方法,而不是使用程序过程:date_diff($ time1,$ time2);我们应该尽可能多地使用面向对象尽可能:$ interval = $ time1-> diff($ time2); – Learner

+1

为什么?你到底在说什么? – Federkun

+0

对于那些没有程序和OOP区别的人: 我相信你不熟悉面向对象的程序设计(OOP)请阅读我在正常搜索中找到的有关“Procedural”和“OOP”编程差异之间的澄清的文章,因为我没有时间解释: https://www.sitepoint.com/community/t/php-procedural-vs-object-oriented/33753 – Learner

0

试试这个,使用strtotime

$to_time = strtotime("10:02:30"); 
$from_time = strtotime("08:10:20"); 
$time_diff = $to_time - $from_time; 
echo gmdate('H:i:s', $time_diff); 

DEMO

+0

它的工作原理!谢谢。 @Dave这是使用strtotime或日期时间的最佳方式? – ruzD

0

嗨使用此$result = $time2->diff($time1)->format('%h:%i:%s');date_diff($time1, $time2)->format('%h:%i:%s');

$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 
1

docs

每个格式字符必须以百分号(%)

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

echo $interval->format('%h:%i:%s'); 
0

使用这个代码前缀来查找秒differnce。你也可以根据你的需要使用它来处理日期时间参数。

<?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); 

?>