Intereting Posts
как добавить границу изображения вокруг изображения? PHP: Какой самый быстрый способ запросить MySQL? Поскольку PDO болезненно медленный хотите отправлять и получать данные json в php __autoload не может выдать исключение, если он не загружает класс при вызове статического метода Закрывает ли PHP файл после того, как обработчик файлов собран из мусора? jQuery AJAX POST для таблицы mysql для динамических табличных данных. Я делаю это как угодно? Создать zip с PHP, добавляющим файлы с url PHP-ориентированное веб-приложение Как использовать паспорт Laravel с пользовательским столбцом имени пользователя Валидаторы Zend и сообщения об ошибках: addValidator и addErrorMessage При отправке формы не отображаются данные POST Могут ли PHP и ASP.Net работать вместе на одном веб-сайте в IIS 7.5? Как получить каждый 15-й и последний день месяца в PHP отображение ошибок, если mysql_query не удалось PHP postback url google wallet IAP

Как получить количество часов до полуночи с помощью PHP

Сценарий: запись была введена в базу данных.

Я пытаюсь выяснить следующие уравнения:

  1. Как получить количество часов с момента добавления записи.
  2. Как получить, сколько часов осталось до полуночи с момента добавления записи.

Учитывая эти моменты:

  • Дата / время: 2012-08-22 20:11:20
  • Печать времени: 1345684280
  • Midnight Tonight: 2012-08-23 00:00:00
  • Полуночное время: 1345698000

Я чувствую, что нахожусь на правильном пути. Нужна ли какая-то правильная математика для расчетов? Я ужасен по математике. Любая помощь или руководство будут оценены. Я не ищу, чтобы кто-то ЗАПОЛНИЛ ЭТО ДЛЯ МЕНЯ. Просто ищите советы о том, что я делаю неправильно, или как я могу сделать это лучше. Возможно, объясните математические формулы, необходимые для достижения моей цели.

Вот что я имею до сих пор:

class tools{ public function __construct(){ } public function check_time($time, $request){ $time = strtotime($time); if($request == 'since'){ $theTime = time() - $time; $prefix = 'Since:'; } elseif($request == 'until'){ $midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y')); $theTime = $midnight - $time; $prefix = 'Until:'; } $tokens = array ( 31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); foreach($tokens as $unit => $text){ if($theTime < $unit) continue; $duration = floor($theTime / $unit); return $prefix.' '.$duration.' '.$text.(($duration>1)?'s':''); } } }// EoF tools class $tools = new tools(); print_r($tools->check_time('2012-08-22 20:11:20', 'since')); print_r($tools->check_time('2012-08-22 20:11:20', 'until')); 

Решение здесь очень простое. Существует незначительная ошибка, которая вызывает все ваши проблемы.

В вашем коде у вас есть это, чтобы рассчитать полночь.

 $midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y')); 

Это неверно для простого факта, что он использует полночь СЕГОДНЯ (что было бы 00:00 сегодня, однако много часов назад с этого момента. Вы хотите полночь ЗАВТРА, так как это считается 00:00 в 24 часа и завтра. способ сделать это просто так:

 $midnight = strtotime("tomorrow 00:00:00"); 

Просто имейте в виду, что strtotime () основывает все на GMT, поэтому убедитесь, что вы установили часовой пояс по умолчанию в файле / приложении.

Надеюсь, мой ответ ясен и объясняет, почему код, который вы опубликовали, является неправильным и как его исправить.

Может, что-то вроде этого? Я должен признать, что не совсем понимаю, что ваш желаемый результат:

 $d1 = new DateTime('2012-08-22 20:11:20'); $d2 = new DateTime('2012-08-23 00:00:00'); $interval = $d1->diff($d2); echo $interval->format('%h hours %i minutes and %s seconds'); 

полночь не больше, чем на следующий день без указания времени, лучший способ сделать это должен быть:

 <?php $datetime1 = new DateTime(date('Ymd H:i:s'));//current datetime object $datetime2 = new DateTime(date('Ym-').date(d));//next day at midnight $interval = $datetime1->diff($datetime2);//diference echo $interval->format('H');printing only hours (same as date format) ?> 

если вы хотите узнать больше: php date_diff

Вы можете попробовать следующее:

 $now = strtotime('2012-08-22 20:11:20'); $midnight = strtotime('2012-08-23 00:00:00'); $difference = $midnight - $now; echo date("H:i:s", $difference);