我試圖獲取兩個日期時間之間的差異並將其作爲日期時間返回。我發現使用差異的例子,但我似乎無法得到它的權利。PHP找到兩個日期時間之間的差異
$timein = date("Y-m-d H:i:s");
$timeout = date("Y-m-d 20:00:00");
$totaltime = $timein->diff($timeout);
但是$ totaltime logs「0000-00-00 00:00:00」到我的數據庫。這是因爲我沒有格式化我的總時間變量?
我試圖獲取兩個日期時間之間的差異並將其作爲日期時間返回。我發現使用差異的例子,但我似乎無法得到它的權利。PHP找到兩個日期時間之間的差異
$timein = date("Y-m-d H:i:s");
$timeout = date("Y-m-d 20:00:00");
$totaltime = $timein->diff($timeout);
但是$ totaltime logs「0000-00-00 00:00:00」到我的數據庫。這是因爲我沒有格式化我的總時間變量?
我不知道你要找什麼樣的格式在您的差異,但在這裏是如何使用的DateTime
$datetime1 = new DateTime();
$datetime2 = new DateTime('2011-01-03 17:13:00');
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%y years %m months %a days %h hours %i minutes %s seconds');
echo $elapsed;
您可以簡單地使用日期時間差異和格式計算差額做到這一點。
<?php
$datetime1 = new DateTime('2009-10-11 12:12:00');
$datetime2 = new DateTime('2009-10-13 10:12:00');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y-%m-%d %H:%i:%s');
?>
對於DATETIME格式的詳細信息,請參閱:here
可以在方式改變區間格式,你想要的。
Here是工作示例
鍵盤連接斷開 – pal4life
Downvote。這不會以OP所要求的格式提供結果。 – mickmackusa
<?php
$val1 = '2014-04-10 11:34:09';
$val2 = '2015-04-10 10:56:15';
$result1 = (explode(' ', $val1)) ;
$result2 = (explode(' ', $val2)) ;
$date1= new DateTime($result1[0]);
$date2=new DateTime($result2[0]);
$diffdate=date_diff($date1,$date2);
$difftime = strtotime($result1[1]) - strtotime($result2[1]);
$dates=$diffdate->format("%R%a days");
echo $dates;
echo $difftime;
?>
儘管這段代碼可能解決這個問題,但代碼中的[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123
代碼查找datetime –
Downvote的區別。這個更近的答案並不比現在接受的答案好,並且在答案本身中沒有提供任何解釋。它沒有提供問題要求的結果。這是一個低合格的答案,需要進行編輯或刪除。 – mickmackusa
<?php
$value='20140203113405';
$val='20150203113410';
$val1=str_split($val,2);
$dateval1=$val1[0].$val1[1]."-".$val1[2]."-".$val1[3];
$timeval1=$val1[4].":".$val1[5].":".$val1[6];
$val2=str_split($value,2);
$dateval2=$val2[0].$val2[1]."-".$val2[2]."-".$val2[3];
$timeval2=$val2[4].":".$val2[5].":".$val2[6];
$date1=new DateTime($dateval1);
$date2=new DateTime($dateval2);
$diffdate=date_diff($date1,$date2);
$dates=$diffdate->format("%a days");
$difftime = strtotime($timeval1) - strtotime($timeval2);
echo $dates;
echo $difftime."seconds";
?>
雖然此代碼片段可能會解決問題,但代碼中的[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Rizier123
iam試圖以這種格式獲取日期時間的差異 –
Downvote。這個更近的答案並不比現在接受的答案好,並且在答案本身中沒有提供任何解釋。它沒有提供問題要求的結果。這是一個低合格的答案,需要進行編輯或刪除。而不是用多個低質量答案亂丟頁面,只發佈一個答案(最好的答案)並刪除其餘答案。 – mickmackusa
約翰·孔德確實在他的方法,所有正確的過程,但不能滿足你的問題的最後一步是要將結果格式化爲您的規格。
此代碼(Demo)將顯示原始差異,試圖立即格式化原始差露出的麻煩,顯示我的製備步驟,最後呈現正確格式化的結果:
$datetime1 = new DateTime('2017-04-26 18:13:06');
$datetime2 = new DateTime('2011-01-17 17:13:00'); // change the millenium to see output difference
$diff = $datetime1->diff($datetime2);
// this will get you very close, but it will not pad the digits to conform with your expected format
echo "Raw Difference: ",$diff->format('%y years %m months %d days %h hours %i minutes %s seconds'),"\n";
// Notice the impact when you change $datetime2's millenium from '1' to '2'
echo "Invalid format: ",$diff->format('%Y-%m-%d %H:%i:%s'),"\n"; // only H does it right
$details=array_intersect_key((array)$diff,array_flip(['y','m','d','h','i','s']));
echo '$detail array: ';
var_export($details);
echo "\n";
array_map(function($v,$k)
use(&$r)
{
$r.=($k=='y'?str_pad($v,4,"0",STR_PAD_LEFT):str_pad($v,2,"0",STR_PAD_LEFT));
if($k=='y' || $k=='m'){$r.="-";}
elseif($k=='d'){$r.=" ";}
elseif($k=='h' || $k=='i'){$r.=":";}
},$details,array_keys($details)
);
echo "Valid format: ",$r; // now all components of datetime are properly padded
輸出:
Raw Difference: 6 years 3 months 9 days 1 hours 0 minutes 6 seconds
Invalid format: 06-3-9 01:0:6
$detail array: array (
'y' => 6,
'm' => 3,
'd' => 9,
'h' => 1,
'i' => 0,
's' => 6,
)
Valid format: 0006-03-09 01:00:06
現在解釋我的日期時間值的準備:
$details
需要日e diff object並將其轉換爲數組。 array_flip(['y','m','d','h','i','s'])創建一個鍵數組,它將用於從(array)$diff
使用array_intersect_key()刪除所有不相關的鍵。
然後,使用array_map()我的方法迭代的每個值和密鑰中$details
,襯墊其左側與0
的適當的長度,並連接所述$r
(結果)字符串必要隔板與所請求日期時間格式相一致。
date()爲您提供了字符串。你不能用字符串計算差異。 – Misch