как рассчитать оставшееся левое время с php и mysql?

У меня есть ситуация, когда мне нужно рассчитать оставшееся время каждые 6 часов, когда я просматриваю время.

У меня есть эта настройка:

<div id="time"><div> <button>trigger</button> 

точнее, у меня есть триггер, который получает стартер времени:

 $(buttom).on('click', function(){ ..... send through ajax the current time to a php file ...if success, get the response and place it in the div }); 

в php-файле я храню это время в базе данных

 if (isset($_POST['time'])){ $storeTime->timestore($_POST['time']); } 

теперь случается так, что всякий раз, когда я вижу, что div я должен видеть левое время:

 <div id="time">5h:50min<div> 

i vizit снова через 30 минут я вижу

 <div id="time">5h:20min<div> 

и так далее.

проблема не отправляет время назад и вперед, используя ajax или что-то еще, но отправляя правильное время.

То, что я думал, – это отправить время каждый раз, когда я нахожу страницу. Сначала сохраните его в поле таблицы, а в других случаях – в отдельном поле таблицы

 id time1 time2 1 123456.. 123124.. 

time1 остается неизменным, поскольку это исходное время, и каждый раз, когда я time1 на странице, я отправляю новое текущее время и время обновления2

здесь я немного теряюсь.

это как я получаю time1 : $getTime = $data->getTime($userId);

и это время, которое приходит каждый раз: $time

Я также знаю, что 6h – 21600 секунд

так

 if ( $time >= ($newTime + 21600) ){ //if the current time is bigger than the first time + 6h it means that 6h have passed // store the new time in the database for reference as the new main time } else { // 6h have not passed yet and we need to calculate how much time is left //here i get confuzed } 

Я знаю, что этот пост немного запутан, возможно, но я надеюсь, что это понятно.

есть идеи?

благодаря

Если вы собираетесь хранить время, когда вы последний раз посещали сайт, вам нужно только один раз сохранить его.

Итак, для вашего примера:

 $current_time = time(); $last_visit_time = $data->getTime($userId); $since_last_visit_time = $current_time - $last_visit_time; $six_hours_in_seconds = 21600; if($since_last_visit_time > $six_hours_in_seconds) { // not sure of the function call here so using yours // store new time as it's been over 6 hours $storeTime->timestore($current_time); $remaining_time = $six_hours_in_seconds; } else { $remaining_time = $six_hours_in_seconds - $since_last_visit_time; } echo "Remaining Seconds: {$remaining_time}<br />"; 

Часть 2 с использованием JavaScript / Ajax вы можете использовать это, чтобы отобразить время останова

Демо-версия:

JS

 var time_in_seconds = 21600; // this would be the $remaining_time PHP variable setInterval(function() { $('#countdown').html(seconds2time(time_in_seconds)); time_in_seconds--; }, 1000); function seconds2time(seconds) { var hours = Math.floor(seconds / 3600); var minutes = Math.floor((seconds - (hours * 3600)) / 60); var seconds = seconds - (hours * 3600) - (minutes * 60); var time = ""; if (hours != 0) { time = hours+":"; } if (minutes != 0 || time !== "") { minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes); time += minutes+":"; } if (time === "") { time = seconds+"s"; } else { time += (seconds < 10) ? "0"+seconds : String(seconds); } return time; } 

HTML

 <span id="countdown"></span>​ 

Используйте TIME_TO_SEC(TIMEDIFF(final_time, initial_time))

 SELECT TIME_TO_SEC(TIMEDIFF('17:00:00', '09:00:00')) -- 28800 SELECT TIME_TO_SEC(TIMEDIFF('12:30:00', '12:00:00')) -- 1800 SELECT TIME_TO_SEC(TIMEDIFF('10:30:00', '10:15:00')) -- 900