Formattare una data in nice date


Come formattare una data in modo che appaia nel formato: “2 minuti fa”

function nice_date($datetime, $full = false)
        {
            date_default_timezone_set("Europe/Rome");

            $time_ago = strtotime($datetime);
            $time_now = time();
            $now = new \DateTime('@' . $time_now);
            $ago = new \DateTime('@' . $time_ago);
            $diff = $now->diff($ago);

            $diff->w = floor($diff->d / 7);
            $diff->d -= $diff->w * 7;

            $string = array(
                'y' => array('singolare' => 'anno', 'plurale' => 'anni'),
                'm' => array('singolare' => 'mese', 'plurale' => 'mesi'),
                'w' => array('singolare' => 'settimana', 'plurale' => 'settimane'),
                'd' => array('singolare' => 'giorno', 'plurale' => 'giorni'),
                'h' => array('singolare' => 'ora', 'plurale' => 'ore'),
                'i' => array('singolare' => 'minuto', 'plurale' => 'minuti'),
                's' => array('singolare' => 'secondo', 'plurale' => 'secondi'),
            );

            foreach ($string as $k => &$v) {
                if ($diff->$k) {
                    if ($diff->$k > 1) {
                        //plurale
                        $v = $diff->$k . ' ' . $v['plurale'];
                    } else {
                        //singolare
                        $v = $diff->$k . ' ' . $v['singolare'];
                    }
                } else {
                    unset($string[$k]);
                }
            }

            //print_r($string);
            if (!$full) {
                $string = array_slice($string, 0, 1);
            }

            if ($time_now > $time_ago) {
                $ret = $string ? implode(', ', $string) . ' fa' : 'proprio adesso';
            } else {
                $ret = $string ? 'tra ' . implode(', ', $string) . '' : 'proprio adesso';
            }
            return $ret;
        }

$my_date = nice_date('2020-01-05 20:30');
echo $my_date // 5 mesi fa

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *