2017-08-24 115 views
0

我見過各種帖子,詢問如何從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來處理我的情況,有沒有更好的解決方案

謝謝!

編輯:用戶只能在每個會話暫停一次純樸的緣故

+0

我認爲getTimestamp是你的朋友在這裏:http://php.net/manual/en/datetime.gettimestamp.php。一旦一個時間戳,你可以做簡單的減法或添加秒,然後根據需要進行格式化。 –

+0

時間戳也可以做到。如果我的時間是08:20而我的午餐時間是00:30 - 我在00:30之前減去08:20,那麼是7:50還是會認爲00:30是上午12:30的軍事時間?因此它會在上午12點30分減去上午8點20分?如果這不起作用,如果我將它格式化爲0小時30分鐘,它會起作用嗎? – YaBoi

回答

0

我欣賞的意見的答覆[甚至那些它們刪除;),我設法得到它的工作通過在$_SESSION['pause_timer'] = $time->format('%h hours, %i minutes')改變暫停碼到$_SESSION['pause_timer'] = $time->format('-%h hours, -%i minutes')。我的問題是我只減去了幾個小時,所以當我的時間只有幾分鐘時間,它就增加了分鐘數並減去了0小時!

+0

如果你擔心PHP會知道什麼時候是什麼,那麼使用createFromFormat:http://php.net/manual/en/datetime.createfromformat.php –