2015-07-09 3 views
0

У меня есть сценарий php, где мне нужно убедиться, что предварительно установленное «будущее» время не прошло.расчет оставшегося времени с использованием php time()

Когда время первоначально вошли (или прошло и потребности relogged), я беру:

$newTime = time() + 15000; // 2.5 minutes from "now" 

Система не бросая это в БД без проблем и числа являются правильными.

Теперь, когда страница загружена, она вытягивает номер из БД и загружает его в .php файл:

error_reporting(E_ALL); 
ini_set('display_errors',1); 
$tname = $_SESSION['username']."Data"; 
$results = $conn->query("SELECT val FROM $tname where pri='pettyTimer'") or die(mysqli_error($conn)); 
    //$conn declared elsewhere for connection and does work properly 
$row = $results->fetch_assoc(); 
$timer = $row['val']; 

Я затем сравнивая времена:

$now = time(); 
if ($timer > time()) { //script below 
} else { 
//more script that seems to be working fine 
} 

Когда original conditional $timer > time() is true Я пытаюсь сломать минуты и секунды оставшегося времени и повторять их в базовом формате, который может быть читаемым пользователю:

$raw = ($timer - $now); 
$minutesLeft = floor($raw/60000); 
$totalMinutes2Mils = $minutesLeft * 60000; 
$totalRemainingSecs = round(($raw - $totalMinutes2Mils)/(1000)); 

echo "You are still laying low from the last job you ran. You still have ".$minutesLeft." Minutes and ".$totalRemainingSecs." Seconds left."; 

Моя проблема заключается в том, что время не меняется при обновлении/перезагрузке страницы.

повторил я как time() и $timer и они 15000 миллисекунд друг от друга, когда я первый зарядил его, так что это только должно существовать (условное быть правдой) в течение 2,5 минут, но я работал по крайней мере 5 минут с момента моего последнего и он все равно на 14 секунд.

Может кто-то, пожалуйста, дважды проверьте мою математику, чтобы убедиться, что я правильно ее вычисляю? Благодаря!

+1

'time()' возвращает метку времени в __секундах__, а не миллисекундах. Даже учитывая это, ваша арифметика повсюду. 15000 миллисекунд - 15 секунд, а не 2,5 минуты. 15000 секунд - чуть более 4 часов. –

ответ

1

Функция time() возвращает текущее время в количестве секунд с момента выпуска Unix Epoch (1 января 1970 года 00:00:00 GMT).

http://www.w3schools.com/php/func_date_time.asp

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

$minutesLeft = floor($raw/60); 
$totalMinutes2Mils = $minutesLeft * 60; 

$newTime = time() + (60*2.5); // 2.5 minutes from "now" 
+0

Спасибо за ссылку. Я не уверен, почему я думал о секундах вместо секунд. Я соглашусь, когда смогу. – jpgerb

1

Время() возвращает секунды, а не миллисекунды, поэтому вы должны добавить 150 вместо 15000, чтобы получить 2:30 минут.

Смежные вопросы