Вычитайте дату и время с текущей даты и времени, чтобы найти возраст в PHP

Предположим, у меня есть билет $create_time = "2016-08-02 12:35:04" . Я хочу вычесть $create_time из текущей даты и времени, например $current_time="2016-08-02 16:16:02" чтобы найти возраст в формате 3hr 41min .

 <?php $sql = "SELECT count(*) as total, create_time FROM article where ticket_id='$ticket_id'"; $otrs_db = $this->load->database('otrs',true); $result = $otrs_db->query($sql); foreach($result->result() as $row) {?> <div class="pull-left"> <h4><b><?php echo $row->total ;?> Article(s)</b></h4> </div> <div class="pull-right"> <h4>Age: <?php echo date("Ymd H:i", strtotime("-$row->create_time",strtotime($thestime))) ?>Created: <?php echo $row->create_time; ?></h4> </div> <?php } ?> 

Я знаю, что мой код вычитания даты неверен. Как я могу сделать это правильно?

Вы должны использовать класс DateTime .

 $create_time = "2016-08-02 12:35:04"; $current_time="2016-08-02 16:16:02"; $dtCurrent = DateTime::createFromFormat('Ymd H:i:s', $current_time); $dtCreate = DateTime::createFromFormat('Ymd H:i:s', $create_time); $diff = $dtCurrent->diff($dtCreate); echo $diff->format("%Y-%m-%d %H:%i"); 

Это возвращает 00-0-0 03:40 См. DateInterval::format для получения дополнительных сведений о форматировании.

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

 function timeSince($t) { $timeSince = time() - $t; $pars = array ( 31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); $result = ''; $counter = 1; foreach ($pars as $unit => $text) { if ($timeSince < $unit) continue; if ($counter > 2) break; $numberOfUnits = floor($timeSince / $unit); $result .= "$numberOfUnits $text "; $timeSince -= $numberOfUnits * $unit; ++$counter; } return "{$result} ago.."; } 

Кредит https://stackoverflow.com/a/20171268/1106380