#php #codeigniter #date
#php #codeigniter #Дата
Вопрос:
Я использую codeigniter, и у меня есть этот код ниже, он преобразует дату в прошедшее время во что-то вроде Asked 1 month, 3 weeks ago
Если дата старше месяца, я бы хотел, чтобы она отображалась только как дата Asked Sept 01 05:34:13
, а если старше года Asked Sept 01 2015 05:34:13
В настоящее время, если время меньше месяца, выводится, как показано ниже, что нормально
пример Задан 1 минуту 14 секунд назад
пример, заданный 2 недели, 3 часа назад
$this->when_was_question_posted(strtotime('2016-09-01 05:34:13'))
Вопрос, как я могу убедиться, что если дата старше месяца
затем отобразите как датуAsked Sept 01 05:34:13
и, если старше
годAsked Sept 01 2015 05:34:13
function when_was_question_posted($distant_timestamp, $max_units = 2) {
$i = 0;
$time = time() - $distant_timestamp; // to get the time since that moment
$tokens = [
31536000 => 'year',
2592000 => 'month',
604800 => 'week',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
1 => 'second'
];
$responses = [];
while ($i < $max_units) {
foreach ($tokens as $unit => $text) {
if ($time < $unit) {
continue;
}
$i ;
$numberOfUnits = floor($time / $unit);
$responses[] = $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '');
$time -= ($unit * $numberOfUnits);
break;
}
}
if (!empty($responses)) {
return 'Asked ' . implode(', ', $responses) . ' ago';
}
return 'Just now';
}
Комментарии:
1. Вы когда-нибудь играли с классом datetime php. Возможно, на это стоит взглянуть.
2. Я использовал только date like
echo date('d-m-y)
, еще не изучив его полностью. не знал бы, как это сделать с помощью приведенного выше кода3. Взгляните на: github.com/briannesbitt/Carbon
4. Что, если дата меньше месяца? Вы этого не указали, и я слишком ленив, чтобы разобраться с вашим кодом 🙂
Ответ №1:
Вот кое-что, что поможет вам начать…
$date_now = new DateTime();
$date = new DateTime('2014-04-01 00:00:00');
$interval = $date_now->diff($date);
if($interval->y > 0) {
echo "More than a year";
echo "<br>";
$display_date = $date->format('M d Y h:i:s');
} elseif($interval->m > 0) {
echo "More than a month";
echo "<br>";
$display_date = $date->format('M d h:i:s');
} else {
// Call your existing function
}