Измените время, прошедшее через месяц, на другой формат

#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
}