2013-11-17 6 views
0

У меня есть столбец базы данных с типом данных «время», в котором хранится 11:30:45. Я принес этот раз в переменной сказатьКак получить разницу в секундах в PHP?

$databasetime = 11:30:45 

Я хочу объявить переменную сказать $currenttime, которая будет содержать время только сейчас. Как и его 11:33:30 прямо сейчас и другую переменную, которая будет содержать их разность в секундах, как

$timediff = $currenttime - $databasetime; 
echo $timediff; 

Я пытаюсь $currenttime = time();, но я не получаю результат, который я пожелаю. Я хочу $timediff = 165, но когда я эхо время(), я получаю очень большое значение.

ответ

1
$databasetime = strtotime('11:30:45'); 
$curtime  = time(); 
echo $curtime - $databasetime; 
1
<?php 
$currentTime = time(); 
$futureDateTime = new DateTime('11:30:45'); // might want to specify a date and timezone, system TZ by default 
$futureTime = $futureDateTime->format('U'); // get unix timestamp 
$timeDiff = $futureTime-$currentTime; 
?> 
1

Вы можете сделать это следующим образом:

$databasetime = '11:30:45'; 
$time1 = strtotime($databasetime); 
$time2 = strtotime('now'); 
$diff = $time2 - $time1; 
echo 'your difference: '.date('H:i:s', $diff); 
+0

Не работает. Текущее время в моей системе - 21:25. Когда я устанавливаю $ databasetime = '21: 24: 00 ', я получаю разницу 18:32:35. Я не знаю, как он рассчитан? –

+0

Что вы видите, если вы будете эхо $ time1 и $ time2? –

1
$datetime1 = new DateTime('10:35:56 2013-11-17'); 
$datetime2 = new DateTime('10:35:50 2013-11-17'); 
$interval = $datetime1->diff($datetime2); 

echo $interval->m . " Month " .$interval->d ." Days ". $interval->h . " Hours, " . $interval->i." Mintues, ".$interval->s." seconds <br/>"; 
1

Вот простой пример.

$databasetime = '11:30:45'; 
$timedif = abs(strtotime('now') - strtotime($databasetime)); 
echo $timedif; //echos the difference in seconds. 

abs используется только для предотвращения числа NEG, которые вы можете или не хотите делать.

+0

@hocat - Сейчас я не получаю значения -ve, но разница слишком велика. Я просто не пытался и получал разницу во времени в 19755 секунд. Но фактическая разница составляет около 2-3 минут. –

+0

@hocat - Является ли PHP сейчас() из машинного времени или из другого места, потому что я даю $ databasetime на 2-3 минуты ниже, чем сейчас. –

+0

@ nkp К сожалению, проблема, как правило, заключается в настройке часового пояса, которая может быть установлена ​​в течение часа или более. Какую версию php вы используете? php 5.3.2-1 имеет [bug] (https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/907816), который делает что-то подобное. Если вам нужна плохая идея для временной работы, чтобы вы могли продолжать развиваться, вы могли бы сделать что-то вроде 'strtotime ('now -5hours')'. – hcoat

1

Вы можете использовать методы в DATETIME 'OO' вернуться 'Отметка времени Unix' целые непосредственно

<?php 
$now = new DateTime('now'); 
$date = new DateTime('11:30:45'); 
echo $now->getTimestamp() - $date->getTimestamp(); 
?> 
+0

не работает. давая значение -ve в тысячах, -19541, что неверно. –

+0

Вероятно, это часовой пояс на сервере и то, что вы храните в базе данных. Попробуйте добавить date_default_timezone_set ('America/Los_Angeles'); или любой другой действующий часовой пояс, который вы используете. – StigM

0

Моя проблема теперь решена. На самом деле все ответы правильные, но проблема связана с часовым поясом по умолчанию. Мне нужен часовой пояс Азия/Калькутта, но выбор европейского часового пояса по умолчанию. Вот почему я не получил желаемых результатов.

Итак, я, наконец, используя код ниже:

date_default_timezone_set('Asia/Kolkata'); 
$databasetime = strtotime('11:30:45'); 
$curtime  = time(); 
echo $curtime - $databasetime; 
Смежные вопросы