Мне нужно преобразовать DateTime в год, месяц, дни, часы, минуты, секунды назад, как и вопрос yahoo, заданный 5week назад, или 1 год назад или 1 месяц назад, моя дата сохраняется в базе данных следующим образом: 2011-11-30 05:25:50
.
Теперь я хочу показать, как год, месяц, дни, часы, минуты и секунды в PHP: how much year, how many months , days, hours, minutes, seconds
назад, но нужно только одно показание единицы времени, как это будет год или дней или часов или минут или секунд.
Я искал об этом, но не понимаю, как я могу это сделать. Я знаю, что в этой теме есть много вопросов по переполнению стека, возможно, это дубликат, но я не могу решить свою проблему.
Заранее спасибо.
Предполагая, что вы имеете в виду относительно настоящего (если вы этого не сделаете, уточните свой вопрос), вы можете использовать это:
$then = new DateTime('2011-11-30 05:25:50'); $now = new DateTime(); $delta = $now->diff($then); $quantities = array( 'year' => $delta->y, 'month' => $delta->m, 'day' => $delta->d, 'hour' => $delta->h, 'minute' => $delta->i, 'second' => $delta->s); $str = ''; foreach($quantities as $unit => $value) { if($value == 0) continue; $str .= $value . ' ' . $unit; if($value != 1) { $str .= 's'; } $str .= ', '; } $str = $str == '' ? 'a moment ' : substr($str, 0, -2); echo $str;
Вывод:
1 year, 9 months, 17 days, 14 hours, 31 minutes, 31 seconds
Я всегда использовал эту функцию:
function when($datetime) { define("SECOND", 1); define("MINUTE", 60 * SECOND); define("HOUR", 60 * MINUTE); define("DAY", 24 * HOUR); define("MONTH", 30 * DAY); $delta = time() - strtotime($datetime); // convert if($delta < 1 * MINUTE) { return $delta == 1 ? "one second ago" : $delta." seconds ago"; } if($delta < 2 * MINUTE) { return "a minute ago"; } if($delta < 45 * MINUTE) { return floor($delta / MINUTE)." minutes ago"; } if($delta < 90 * MINUTE) { return "an hour ago"; } if($delta < 24 * HOUR) { return floor($delta / HOUR)." hours ago"; } if($delta < 48 * HOUR) { return "yesterday"; } if($delta < 30 * DAY) { return floor($delta / DAY)." days ago"; } if($delta < 12 * MONTH) { $months = floor($delta / DAY / 30); return $months <= 1 ? "one month ago" : $months." months ago"; } else { $years = floor($delta / DAY / 365); return $years <= 1 ? "one year ago" : $years." years ago"; } }
эхо, когда (ВАША ДАТА ЗДЕСЬ) вернет лучший формат относительного времени, который может быть днем, часами, или если это было не так давно, даже в секундах.
Попробуйте следующее: http://www.php.net/manual/en/function.strtotime.php
PHP имеет приятную функцию strtotime
готова для ваших нужд.
Это даст вам временную метку, тогда вы можете просто делать математику оттуда с любой даты, из которой вы вычитаете.
Вы можете попробовать расщепить это, используя preg_split.
Попробуйте что-нибудь вроде
$output = preg_split( "/ (-| |:) /", $input );
Это должно дать вам массив, где первый элемент – год, второй – месяц и т. Д.