У меня есть ситуация, когда мне нужно рассчитать оставшееся время каждые 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