1

MySQLデータベースに保存されたコメントを作成しています。

time()コメントが投稿されているので、phptime関数をログに記録しています。そうすれば、「コメント... 4秒前に投稿しました」などのメッセージが表示され、2分後にページを更新すると、「コメント...2分前に投稿しました」と表示されます。

time()他のデータと一緒にデータベースに入力する方法は次のとおりです。

$date=time();

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

今...私はこのようにデータを取得します:

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

私のサーバーのサンプル出力は次のとおりです。

ランダムコメント

これはこれまでで最も素晴らしいコメントです!!!!

-カイル

1278905319

時刻「1278905319」を「4秒前に投稿」などの読みやすい形式に変換したり、秒、分、時間、日、週、月、年を処理したりするにはどうすればよいですか。

PHPはそれを行うのに間違った方法ですか?MySQLのタイムスタンプについて読みましたが、それや私の場合にそれを機能させる方法がわかりません。

だから私の主な質問は、出力時に読み取り可能な時間に時間をフォーマットする方法です。「2秒前」

ありがとうございました。=)

4

3 に答える 3

1

まず、自動更新のタイムスタンプフィールドを使用して、MySQLに日付を挿入させます。

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;

このように、PHPコードから日付を挿入することを心配する必要はありません。他の場所(たとえば、MySQLクライアント)からテストを行う場合でも、日付は正しく挿入されます。

また、日付と時刻の操作が非常に簡単になるため、 PHP DateTimeクラス(PHP 5.3.0以降が必要)を使用する必要があります。データベースからいくつかの情報を取得し、フォーマットされた時間間隔を返す例を次に示します。

$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

DateInterval :: formatパラメーターを使用して、間隔を好きなようにフォーマットできます。MySQLを返すNOW()ようにすることで、アプリケーションサーバー(PHPを実行しているサーバー)とデータベースサーバーの間の時間の不一致を確実に回避できます。

于 2010-07-12T07:45:17.447 に答える
0

これが私がここで見つけた関数で、1人のJohnMcClumphaによって書かれました。

<?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;
}
于 2010-07-12T07:27:54.743 に答える
0

複雑な時間計算が必要な場合は、特にソースdistance_of_time_in_wordsにあるsymfonyのDateHelperをチェックしてください。これは非常に強力な方法であり、非常にきめ細かい時間計算を知っています(たとえば、5秒前、20秒前、約1分前、10分前など)。


日付をフォーマットしたいだけの場合は、MySQLを介してフォーマットできます。

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

たとえば、12:24:59になります。

于 2010-07-12T07:31:51.320 に答える