Blog and Web

Fechas más amigables en WordPress

La fecha en los artículos ayuda al lector a saber cuan fresca es la información y su contexto, en algunas temáticas es un dato imprescindible. El formato normal de una fecha, tipo "6 de Junio de 2010", ya ofrece suficiente información, sin embargo, no es tan rápida de interpretar como una "fecha relativa" estilo "Hace 10 minutos" o "Hace 10 días".

Servicios como Facebook o Twitter usan este formato y WordPress tiene una función sencilla para imprentarlo: human_time_diff().

Actualización: También puedes ver como hacer fechas amigables en Blogger

Fechas amigables en WordPress

Para usarla en los posts

Reemplaza la función que muestra la fecha en todos los archivos de tu theme por:

<?php echo 'Hace '.human_time_diff(get_the_time('U'), current_time('timestamp')); ?></a>

Las funciones que muestran la fecha en el post suelen ser: the_date(), get_the_date(), the_time() o the_modified_date() y suele encontrarse en los archivos: single.php, index.php, archive.php, search.php y page.php.

Para comentarios:

Reemplaza la función que muestra la fecha de los comentarios en el archivo comments.php o functions.php por:

<?php echo 'Hace '.human_time_diff(get_comment_time('U'), current_time('timestamp')); ?>

Y las funciones que suelen mostrar la fecha en los comentarios son: comment_date(), get_comment_date(), comment_time() y get_comment_time().

Con esto se habilitan las fechas relativas tanto en entradas como comentarios. En lo personal, solo lo implementé en single.php y functions.php, para comentarios.

Función PHP para obtener el tiempo entre dos fechas

La función que usa WordPress para mostrar el tiempo entre dos fechas en forma de texto es la siguiente:

function human_time_diff( $from, $to = '' ) {     
    if ( empty($to) )
        $to = time();
    $diff = (int) abs($to - $from);
    if ($diff <= 3600) {
        $mins = round($diff / 60);
        if ($mins <= 1)
            $since = __('1 minuto');
        else
            $since = sprintf( __('%s minutos'), $mins);
    } else if (($diff <= 86400) && ($diff > 3600)) {
        $hours = round($diff / 3600);
        if ($hours <= 1)
            $since = __('1 hora');
        else 
            $since = sprintf( __('%s horas'), $hours );
    } elseif ($diff >= 86400) {
        $days = round($diff / 86400);
        if ($days <= 1)
            $since = __('1 d&iacute;a');
        else
            $since = sprintf( __('%s d&iacute;as'), $days );
    }
    return $since;
}

Que puede usarse en cualquier otra aplicación PHP que recibe dos parámetros, correspondientes a las fechas de las que se desea conocer la diferencia en tiempo.