MySQLテーブルからPHP Time()のフォーマット
-
14-09-2020 - |
質問
MySQLデータベースに保存されているコメントを作成しています。
コメントが投稿されるため、PHP Time関数time()
を記録しています。そのようにして... "コメント...投稿4秒前に表示されます。"コメント... 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
.
サーバー上の出力サンプルは次のとおりです。
ランダムなコメント
これは史上最も素晴らしいコメントのことです!!!!
- kyle
1278905319
時間 "1278905319"をどのように変換することができますか、「4秒前に投稿された」や秒数、分、時間、日数、週、月、年、年のような何かを読み取り可能な形式に変換することができますか?
はそれをする間違った方法は?私はMySQLのタイムスタンプを読みますが、私はそれを理解していません、またはそれを私の訴訟で働く方法はありません。
だから私の主な質問は、時間を出力時に読みやすい時間にフォーマットする方法です。 "2秒前"
ありがとうございます。=)
解決
これは私が見つけた関数です。ここで書かれた、1つの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;
}
. 他のヒント
最初に、自動更新タイムスタンプフィールドを使用して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
.