2013-04-02 217 views
1

我想減去當前日期時間和我的數據庫中規定的時間之間的時差。日期時間的當前格式是yyyy:mm:dd hh:mm:ss,但是對於這種特定情況我只是想減去時間而不是日期,所以我只希望hh:mm:ss被計算並存儲到另一個不同的日期變量我可以使用和格式如何我想要的。是否有可能採取完整的日期時間,將其分開並對其進行區分?我認爲這有點令人困惑,所以問你是否需要澄清。這裏就是我迄今爲止嘗試:PHP差異部分日期時間

<?php 
//The time in the database 
$classTime = DateTime::createFromFormat('Y-m-d H:i:s', '0000-00-00 18:30:00'); 

$timein = new DateTime("now", new DateTimeZone('America/Detroit')); 
$timein->getTimestamp(); 
$timeout = $classTime; 
$totaltime = $timeout->diff($timein); 
$totaltime = $totaltime->format('Y-m-d H:i:s'); 
$totaltime = date('0000:00:00 H:i:s', strtotime($totaltime)); 
//I create a new date because i'm storing this time into the database, which can't be done with a datetime. 

//FORMAT TIMES 
$timein = $timein->format('Y-m-d H:i:s'); 
$timeout = $timeout->format('Y-m-d H:i:s'); 
echo "Time in " . $timein . " Time Out " . $timeout . " Total Time " . $totaltime; 
?> 

該電流輸出返回:

Time in 2013-04-02 14:05:32 Time Out -0001-11-30 18:30:00 Total Time 0000:00:00 00:00:00 

但我想它返回的東西,如:

Time in 2013-04-02 14:05:32 Time Out -0000-00-00 18:30:00 Total Time 0000:00:00 03:30:00 
+1

你假設出來的時候總是同一日期?爲什麼不包括日期? – Revent

+0

不幸的是,它不是,它取決於從數據庫中提取的類,我只是以這種方式做到了簡單的事情,對不起,如果這種困惑更重要。 – Staleyr

+0

如果您正在處理「時間」部分,則「DateTime」無法正確計算。時間基於時間戳,0表示1970年1月1日UTC(如果我沒有記錯的話),所以計算後只留下一小時/分鐘/秒的時間戳就會給秒數差,所以從那裏開始, d必須手工計算,以小時:分鐘:秒。 – Jon

回答

1

你的問題不是很清楚,我花了很多時間回答錯誤的問題,直到我仔細查看了代碼,看看您真正想要的是什麼。

據我所知,它將數據庫的結束時間作爲MySql日期時間類型存儲在數據庫中,並且您希望找到now和課程結束時間之間的剩餘時間。

爲了達到這個答案,我會忽略時區。

你開始

$classTime = DateTime::createFromFormat('Y-m-d H:i:s', '0000-00-00 18:30:00'); 

做一個有意義的時間比較,需要$ classTime的日期部分設置爲今天: -

$timeIn = new DateTime(); 

$year = (int)$timeIn->format('Y'); 
$month = (int)$timeIn->format('m'); 
$day = (int)$timeIn->format('d'); 

$classTime->setDate($year, $month, $day); 

然後,您可以做比較: -

$diff = $timeIn->diff($classTime); 

$ diff現在是DateInterval的一個實例。

現在,我們可以回聲出信息: -

$start = $timeIn->format('Y-m-d H:i:s'); 
$end = $classTime->format('Y-m-d H:i:s'); 
$duration = $diff->format("%Hh, %Im, %Ss"); 
echo "Time in: $start, Time out: $end, Duration: $duration"; 

這在我跑的代碼的時候,給了以下的輸出: -

Time in: 2013-04-05 13:22:54, Time out: 2013-04-05 18:30:00, Duration: 05h, 07m, 06s