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酒
getTimestampはあなたの友人です:http://php.net/manual/en/datetime.gettimestamp.php。タイムスタンプを取得したら、簡単な減算や秒数の追加だけで、必要に応じてフォーマットすることができます。 –
タイムスタンプでも可能です。私が08:20に私の時間を過ごしていて、昼食が00:30にあったなら、私は08:30を00:30で引いた、7:50か、00:30は軍事的な時間だと思うでしょうか?したがって、それは午前12時30分に午前8時20分を減算するでしょうか?それがうまくいかない場合は、0時間、30分のフォーマットをしても問題ありませんか? – YaBoi