2016-11-04 88 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); 

?>