Предположим, у меня есть билет $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.."; }