0

投稿がいつ作成されたかがわかるものを作成し、4時間後の時間をデータベースに挿入しようとしています...

次に、すべての投稿を一覧表示し、有効期限までのカウントダウンを表示する別のページがあります...

現在のtime()を使用し、それをデータベース内の投稿の有効期限と比較して、カウントダウンの残り時間、分、秒を計算します。しかし、私は問題を抱えています...私は自分のコンピューターに行き、カウントダウンを見て、それから私の友人のコンピューターで完全に異なる数を見る。

サーバー時間の違いはありますか?または何?

基本的にこれは私のデータベースにあるものです

投稿タイトル->「私の投稿タイトル」の有効期限->13:50:02

次に、display_post.phpがあります。

while ($allQuestions = mysql_fetch_array($r)){
   $now = new DateTime(date("G:i:s",time()));
   $exp = new DateTime($allQuestions['time_expires']);
   $diff = $now->diff($exp);
   printf('%d hours, %d minutes, %d seconds', $diff->h, $diff->i, $diff->s);
}

私はこれがどのように行われるかについての手がかりがありません...私はまた、ここにこのコードである新しい投稿の挿入に問題があるかもしれません:

$time_created = date("h:i:s",time());
$time_expires = date("h:i:s",time()+(4*3600));
$query = "INSERT into questions (time_created, time_expires)VALUES('".$time_created."', '".$time_expires."')";
mysql_query($query) or die(mysql_error());

では、ユーザーが新しい投稿を挿入してから、ユーザー(およびさまざまなタイムゾーンの他のユーザー)がページに移動して、有効期限が切れるまでの残り時間(作成から4時間)を確認できるようにするにはどうすればよいですか?

また、カウントダウンに表示されるこの数値は、別のタイムゾーンに影響しますか?

4

2 に答える 2

2

違いは、ほとんどの場合に見られるタイムゾーンによるものです。タイムゾーンの修正を設定した後、次のことを行ってください。

$timezone = "Asia/Calcutta";
if(function_exists('date_default_timezone_set'))
   date_default_timezone_set($timezone);

上記のコードを使用しています。タイムゾーンを知るには、http://php.net/manual/en/timezones.phpにアクセスしてください

また、コードに秒を追加していないことがわかりました。

$time_expires = date("h:i:s",time() + 60*60*4);
于 2013-03-04T05:11:31.140 に答える
2

あなたのコードは現在の時間に4秒を追加しています

$time_expires = date("h:i:s",time()+4);

4時間を追加する必要がある場合、コードは次のようになります。

$time_expires = date("h:i:s",time()+14400);

また、タイムゾーンを設定する必要がありますが、そのためのphp警告が表示されませんか?

date_default_timezone_set("UTC"); // is referring to the GMT timing 

したがって、UTCに基づいてすべての計算を行うと、すべてがうまくいくはずです。

編集:MYSQLを使用してPHPコードをシンプルにします。

これを使用する代わりに:

$time_created = date("h:i:s",time());
$time_expires = date("h:i:s",time()+(4*3600));
$query = "INSERT into questions (time_created, time_expires)VALUES('".$time_created."', '".$time_expires."')";
mysql_query($query) or die(mysql_error());

これを使って:

$query = "INSERT into questions (time_created, time_expires) 
    VALUES(CURTIME(),CURRENT_TIMESTAMP + INTERVAL '4' HOUR)"

mysql_query($query) or die(mysql_error());

もう1つは、データベースへの接続です

mysql_connectこの拡張機能はPHP5.5.0で非推奨になり、将来削除される予定です。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL:APIガイドの選択および関連するFAQも参照してください。

PDOについて詳しく知る必要がある場合は、ここをクリックしてください

于 2013-03-04T05:12:34.317 に答える