2017-08-24 17 views
0

DateTimeから特定の時間、日などを減算する方法を尋ねるさまざまな投稿がありますが、私の質問は少し異なります。DateTimeを変更する方法によってDateTimeを減算する方法

私はユーザーがログインしていると、システムは日付/時刻を記録します。 1秒ごとに、タイマーは現在の日付/時刻と記録された日付/時刻の差に基づいて増加し、効果的にログインタイマーを作成します。その後、ユーザーはタイマーを一時停止することを決定し、システムは一時停止開始と一時停止終了を記録します(再開時)。私がしたいのは、表示された時間を休止時間から差し引いて、一時停止中にタイマーが「増加」しないようにすることです。私は実際のカウンターを毎秒加算していないので、昼食でカウントアップできない場合は、タイマーの適切な値を計算する方法を知らない。ここで

は、タイマー(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一時停止されている上のコードです。 diffが分(30分)や時間(例えば1時間30分)を返すかどうかわからないときに、diffが返すオブジェクトでDateTimeを減算するにはどうすればよいですか?私はそれを知らない結果、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分 - と午後二時18分に午前1時48分からの時間を変更するには、本当に混乱しています明らかに1:08になるはずです。つまり、自分の状況にDateTimeを不適切に使用しているということです。より良い解決策がありますか?

ありがとうございました!

編集:ユーザーのみsimplicities酒

+0

getTimestampはあなたの友人です:http://php.net/manual/en/datetime.gettimestamp.php。タイムスタンプを取得したら、簡単な減算や秒数の追加だけで、必要に応じてフォーマットすることができます。 –

+0

タイムスタンプでも可能です。私が08:20に私の時間を過ごしていて、昼食が00:30にあったなら、私は08:30を00:30で引いた、7:50か、00: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 –

関連する問題