Domanda

Sto creando commenti memorizzati in un database MySQL.

Sto registrando la funzione Time PHP time() in quanto il commento è pubblicato. In questo modo sta visualizzando un messaggio come ... "Commento ... Pubblicato 4 secondi fa" E se aggiorno la pagina 2 minuti dopo, ha visualizzato "Commento ... Pubblicato 2 minuti fa"

Ecco come sto entrando in time() nel database insieme agli altri dati:

$date=time();

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

Ora ... prendo i dati come questo:

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
.

L'uscita del campione sul mio server è:

.

Commento casuale

Questa è la cosa più fantastica cosa mai !!!!

-kyle

1278905319

Come potrei convertire il tempo "1278905319" in un formato leggibile come "Pubblicato 4 secondi fa" o qualcosa che si occupa di secondi, minuti, ore, giorni, settimane, mesi, anni?

è PHP il modo sbagliato per farlo? Ho letto di mysql timestamping ma non lo capisco o come farlo funzionare nel mio caso.

Quindi la mia domanda principale è, come formattare il tempo in un momento leggibile sull'output. "2 secondi fa"

Grazie.=)

È stato utile?

Soluzione

Ecco una funzione che ho trovato qui , scritto da uno 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;
}
.

Altri suggerimenti

Innanzitutto, lascia che MySQL inserisca la data per te utilizzando un campo TimeStamp Automati Aggiornamento:

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;
.

In questo modo, non è necessario preoccuparti di inserendo la data dal tuo codice PHP, e se si eseguono alcuna prova da altrove - dal client MySQL, ad esempio, la data sarà ancora inserita correttamente. Dovresti anche usare il PHP DateTime Class (richiede PHP 5.3.0 o superiore), in quanto rende il lavoro con le date e i tempi abbastanza semplici. Ecco un esempio di ottenere alcune informazioni dal database e restituire un intervallo di tempo formattato:

$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
.

È possibile formattare l'intervallo comunque che ti piace utilizzare il DATEFERVAL :: Formato < / a> Parametri. Ottenere MySQL per tornare NOW(), assicurati che qualsiasi discrepanza temporale tra il server dell'applicazione (quello che esegue PHP) e il server del database viene evitato.

Se è necessario calcoli temporali complessi, controlla la data-piena di Symfony, in particolare distance_of_time_in_words come trovato nel sorgente .Questo è un metodo molto potente che conosce un calcolo del tempo a grana molto fine (ad esempio 5 secondi fa, 20 secondi fa, circa 1 minuto fa, 10 minuti fa, ...)


.

Se vuoi solo avere il Data formattato , è possibile formattarlo tramite mysql:

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

ti darebbe 12:24:59 ad esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top