Как рассчитать оставшееся время с php и mysql? - PullRequest
1 голос
/ 18 февраля 2012

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

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

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

и т. д.

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

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

id     time1        time2
1      123456..     123124..

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

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

вот как я получаю 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

}

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

есть идеи?

спасибо

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Использование 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
1 голос
/ 18 февраля 2012

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

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

$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>​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...