Pregunta

Estoy creando comentarios almacenados en una base de datos MySQL.

Estoy de registro de la función de tiempo de php time() como el comentario es publicado.De esa manera es mostrar un mensaje como..."comentario...publicado hace 4 segundos" y si me actualice la página 2 minutos más tarde había de pantalla "comentario...publicado 2 minutos"

He aquí cómo estoy entrando time() en la base de datos junto con los demás datos:

$date=time();

// Insert data into mysql
$sql="INSERT INTO testimonials (username, comment, date) 
  VALUES ('$username', '$comment', '$date')";

Ahora...Me agarra los datos como este:

while ($row = mysql_fetch_row($result) )
{
  echo "<b>Random Comment</b></br>";
  echo ("<p>\n> $row[1]"); //comment
  echo ("</br>-$row[0]</p>"); //name
  echo ("</br>$row[2]"); //date

La salida de ejemplo en mi servidor es:

Al Azar Comentario

Este es el más impresionante comentario cosa que nunca!!!!

-Kyle

1278905319

¿Cómo puedo convertir el tiempo "1278905319" en un formato legible, tales como, "publicado hace 4 segundos" o algo que se ocupa de los segundos, minutos, horas, días, semanas, meses, años?

En PHP la forma incorrecta de hacerlo?He leído acerca de MySQL de sellado de tiempo, pero no entiendo que o cómo hacer que funcione en mi caso.

Así que mi pregunta principal es, ¿cómo dar formato a la vez en una lectura de tiempo en la salida."2 segundos atrás"

Gracias.=)

¿Fue útil?

Solución

He aquí una función que he encontrado aquí, escrito por John McClumpha:

<?php
function RelativeTime($timestamp){
    $difference = time() - $timestamp;
    $periods = array("sec", "min", "hour", "day", "week", "month", "years", "decade");
    $lengths = array("60","60","24","7","4.35","12","10");

    if ($difference > 0) { // this was in the past
        $ending = "ago";
    } else { // this was in the future
        $difference = -$difference;
        $ending = "to go";
    }       
    for($j = 0; $difference >= $lengths[$j]; $j++) $difference /= $lengths[$j];
    $difference = round($difference);
    if($difference != 1) $periods[$j].= "s";
    $text = "$difference $periods[$j] $ending";
    return $text;
}

Otros consejos

En primer lugar, vamos a MySQL insertar la fecha para que mediante una actualización automática de campo de marca de hora:

CREATE TABLE `table_a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(255),
  `comment` TEXT,
  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

De esta manera, usted no necesita preocuparse acerca de la inserción de la fecha de su código PHP, y si haces alguna prueba de cualquier lugar - desde el cliente de MySQL, por ejemplo, la fecha todavía no se insertan correctamente.

También se debe utilizar el PHP Clase DateTime (requiere PHP 5.3.0 o mayor), como se hace el trabajo con fechas y horas bastante simple.He aquí un ejemplo de obtener información de la base de datos y devolver un formato de intervalo de tiempo:

$result = $mysqli->query(
    'SELECT ' .
    '`id`, ' .
    '`username`, ' .
    '`comment`, ' .
    '`date`, ' .
    'NOW(), ' .
    'FROM table');

$row = $result->fetch_assoc();

print_r($row);
Array
(
    [id] => 1
    [username] = 'Fred'
    [comment] = 'My first post'
    [date] => 2009-09-28 07:08:12
    [now] => 2010-07-12 08:47:03
)

$now = new DateTime($row['now']);
$post = new DateTime($row['date']);
$interval = $post->diff($now);
echo $interval->format('%m months, %d days, %d days, %h hours, %m minutes, %s seconds');

// 9 months, 14 days, 14 days, 1 hours, 9 minutes, 51 seconds

Usted puede formatear el intervalo sin embargo, usted como el uso de la DateInterval::formato de los parámetros.Mediante la obtención de MySQL para volver NOW(), se asegurará de que cualquier tiempo de discrepancia entre el servidor de aplicaciones (el que ejecuta PHP), y su servidor de base de datos es evitado.

Si usted necesita el complejo cálculos de tiempo, retirar symfony del DateHelper, especialmente distance_of_time_in_words como se encuentra en la fuente.Este es un muy poderoso método que no sabe muy detallado del cálculo de tiempo (por ejemplo,5 hace segundos, 20 segundos atrás, aproximadamente hace 1 minuto, 10 minutos,...)


Si usted sólo quiere tener la el formato de la fecha, puede dar formato a través de MySQL:

SELECT your_fields, FROM_UNIXTIME(date, 'H:%i:%s') FROM table;

le dan 12:24:59 por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top