我見過各種帖子,詢問如何從DateTime中減去特定的小時數,天數等 - 但我的問題有點不同。如何通過改變時間來減去日期時間
說我有一個用戶登錄,系統記錄日期/時間。每秒鐘,計時器會根據當前日期/時間和記錄的日期/時間之間的差異增加 - 有效地創建登錄計時器。然後,用戶決定暫停定時器,因此係統記錄暫停開始和暫停結束(當它們恢復時)。我想要做的是使顯示的時間減去暫停時間 - 這樣暫停時計時器不會「增加」。因爲我沒有使用實際的計數器,所以每秒鐘都不會計算在這種情況下,我不知道如何計算計時器的適當值。
這裏是上顯示所述定時器(incriment.php的一部分)的代碼:
date_default_timezone_set('America/Chicago');
$date = new DateTime(date('m/d/Y H:i'));
$date2 = new DateTime(date($_SESSION['date_in'] . ' ' .
$_SESSION['time_in']));
$interval = $date->diff($date2);
$interval = $interval->format('%H:%I');
$_SESSION['current_timer'] = $interval;
echo $_SESSION['current_timer'];
這裏是上被暫停
if(isset($_SESSION['paused']) && $_SESSION['paused'] === true) {
echo '<div class="info">';
echo '<img src="images/information-button" style="max-width:3em">';
if(isset($_SESSION['pause_start'])) {
date_default_timezone_set('America/Chicago');
if(isset($_SESSION['pause_end'])) {
$time = $_SESSION['pause_end']->diff($_SESSION['pause_start']);
echo '<br>Current pause time: ' . $time->format('%H:%I');
} else {
$time = new DateTime(date('H:i'));
$time = $time->diff(new DateTime($_SESSION['date_pause_start'] . ' ' . $_SESSION['pause_start']));
$_SESSION['pause_timer'] = $time->format('%h hours, %i minutes');
echo '<br>Pause timer: ' . $time->format('%h hours, %i minutes');
}
echo '</div>';
}
}
TLDR代碼;當我不知道該差異是否會返回分鐘數(例如30分鐘)或小時數(例如1小時30分鐘)時,如何通過由diff返回的對象來減去日期時間。我不能做this作爲不知道的結果,我也不能做像$date->modify("+30 minutes")
這樣的事情,因爲我不知道它是幾分鐘還是幾小時或什麼。我覺得應該很容易,因爲在我的午餐計算中,$time
顯示暫停的時間(例如:30分鐘),並將其用於字符串,我可以使用$date->modify
策略 - 但這不起作用(請參閱下面的內容)我incriment.php我之前展示)
$interval = $interval->format('H:i');
if(isset($_SESSION['pause_timer'])) {
$interval = new DateTime(date($interval));
$interval = $interval->modify("-". $_SESSION['pause_timer']);
echo '-' . $_SESSION['pause_timer'];
}
但是,回聲的出-0小時40分鐘,如果用戶被暫停40分鐘 - 和改變從01:48時至14:18這是非常令人困惑因爲它顯然應該是1:08。這對我意味着我不適當地使用DateTime來處理我的情況,有沒有更好的解決方案
謝謝!
編輯:用戶只能在每個會話暫停一次純樸的緣故
我認爲getTimestamp是你的朋友在這裏:http://php.net/manual/en/datetime.gettimestamp.php。一旦一個時間戳,你可以做簡單的減法或添加秒,然後根據需要進行格式化。 –
時間戳也可以做到。如果我的時間是08:20而我的午餐時間是00:30 - 我在00:30之前減去08:20,那麼是7:50還是會認爲00:30是上午12:30的軍事時間?因此它會在上午12點30分減去上午8點20分?如果這不起作用,如果我將它格式化爲0小時30分鐘,它會起作用嗎? – YaBoi