0

ユーザーが送信ボタンを押した直後にカウントアップを開始するなど、前の時間を作ろうとしていますが、テーブルにタイムスタンプフィールドがありますが、どうすればそのようにできますか。さて、ここに私が考えていることがあります。ユーザーが送信を押すと、0 から始まる整数が生成され、1 秒ごとにカウントアップされ、60 で除算されます。そのため、その整数が 120 になるまでには、すでに 60 で除算されて 2 として表示されます。または、2分前、今、私はまだ巨大なmysql / php初心者であるため、これを行う方法がわかりません。

JavaScriptソリューションも良いでしょう。

これが私のコードです:

while ($row=mysql_fetch_array($result)) {


echo "<tr><td>";
echo $row['cname'];
echo "</td><td>";
echo $row['level'];
echo "</td><td>";
echo $row['region'];
echo "</td><td>";
echo $row['time'];
echo "</td><td>";
echo $row['comment'];
echo "</td></tr>";

}

これは、テーブルのメイン表示ページ用です。

テーブルに追加するページは次のとおりです。

 include('config.php');
$con = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME);

mysql_query("INSERT INTO cw_LFG(cname, level, region, time, comment) VALUES ('".$_POST['cname'] ."','".$_POST['level'] ."','".$_POST['region'] ."','".$_POST['time'] ."','".$_POST ['comment']."')");



header ("Location: lfg.php");
mysql_close($con);
4

2 に答える 2

1

まず第一に、あなたが 5 歳の場合、JavaScript で遊ぶべきではありません。冗談とは別に、必要なのは、ユーザーが送信にヒットしたとき、サーバー側にタイムスタンプを保存することです。これは、SQL テーブルで言及した可能性があるためです。ページロード時に、この値をページに渡します (次のように送信できます)。 PHPによって生成されたHTML内のJavaScript配列ですが、ファジーコードを避けるために、ページロードの直後にAJAXを使用してサーバーからすべてのデータを個別に要求し、それらのタイムスタンプと現在の時刻の差を計算して更新するだけですを使用して、これらの値を持つセルを 1 秒 (または 1 分) ごとにsetInterval()

var exampleArray = [
  ['user1', timestamp],
  ['user1', timestamp]
];
function count(){
  var currentTime = new Date().getTime();

  for(var i in exampleArray){   
      DOM.tableToAppendTo.rowToAppendTo.innerHTML += 
    '<td>' + exampleArray[i][0] + '</td>' + 
    '<td>' + calculateTime(exampleArray[i][1] - currentTime) + '</td>'
  }
}
function calculateTime(difference){
  if(difference < 59000){
    return (difference / 60000) + ' minutes ago';
  }else{
    return (difference / 1000) + ' seconds ago';
  }
}
setInterval(count,1000);
于 2013-07-01T18:00:57.577 に答える
1

経過時間文字列を作成するために使用できる関数を次に示します。

function timeElapsed($time) {
    $elapsedTime = time() - $time;

    if ($elapsedTime < 1) {
        return 'Right now';
    }

    // Length of time units
    $units = array( 
        12 * 30 * 24 * 60 * 60  => 'year',
        30 * 24 * 60 * 60       => 'month',
        24 * 60 * 60            => 'day',
        60 * 60                 => 'hour',
        60                      => 'minute',
        1                       => 'second'
    );

    $string = '';

    foreach ($units as $secs => $unit) {
        $amount = floor($elapsedTime / $secs);

        if ($amount >= 1) {
            $elapsedTime -= $amount * $secs;
            $string .= "$amount $unit" . ($amount > 1 ? 's' : '') . ' ';
        }
    }

    return $string . 'ago';
}

レコードを作成すると、現在の時刻が保存されます (ここでは UNIX タイムスタンプを使用しています)。ユーザーに表示したい場合は、タイムスタンプを関数に渡すだけで、「5 日 2 分 30 秒前」のような文字列が返されます。

使用例

echo timeElapsed(1345678910);
于 2013-07-01T18:02:01.417 に答える