0

DBエントリに有効期限を設定しようとしています。フィールドをに設定し、datetimeMySQLを介して手動でいくつかの値を入力しました

テーブルから値を取得して、に変換しstrtotime()ます。次に、strtotime("now");を使用して現在の時刻を取得します。またはtime(); それらは同じ値を返すようでした。

次に、将来の日付(データベースからの日付)を取得し、ifステートメントを使用して、現在の時刻よりも小さいかどうかを確認します。その場合は、期限切れとして設定します。それでも現在の時間よりも大きい場合は、残り時間を返します。

そのためのコードは次のとおりです。

$time_left = "";
$value['ex_date'] = '2012-11-22 18:17:33';// this is whats in the DB now.
$future_time = strtotime($value['ex_date']);
$now_time = strtotime('now');

if($deal_end < $now_time){
    $time_left = 'Expired';
}else{
    $seconds = $future_time - $now_time;
    $days = floor($seconds / 86400);
    $seconds %= 86400;
    $hours = floor($seconds / 3600);
    $seconds %= 3600;
    $minutes = floor($seconds / 60);
    $seconds %= 60;

    if($days >= 1) {$time_left .= "D:$day ";}
    if($hours >= 1) {$time_left .= "H:$hours ";}
    if($minutes >= 1) {$time_left .= "M:$minutes ";}
    if($seconds >= 1) {$time_left .= "S:$seconds ";}

何らかの理由で、上記はうまく機能しません。少し時間差があるようです。

私の質問は:サーバー時間とデータベース時間をチェックする方法はありますか?

どういうわけか、strtotime('now');時間は現在の時間とは2/3時間ほど違うように見えるからです。

4

3 に答える 3

0

誰かが私がそれをどのように解決したかについて興味がある場合:

$result = mysql_query("select CURRENT_TIMESTAMP;");
$row = mysql_fetch_array( $result );
$DB_now = $row['CURRENT_TIMESTAMP'];



$deal_end = strtotime($value['ex_date']);
$now_time = strtotime($DB_now);

データベースの現在のタイムスタンプを「今」として使用するだけです。それが最善の解決策かどうかはわかりませんが、機能します。

于 2012-11-22T14:38:40.020 に答える
0

他に2つのアプローチを提案できます
。まだ有効期限が切れていないデータベース行から選択し、クエリ自体にロジックを追加します
。有効期限が切れたデータベースエントリをクリアするcron/mysqlスケジュールを毎分実行します

SELECT * from TABLE where X = Y and NOW() < expiredField


さらに、PHPには、実行しようとしている日付の操作専用のクラスが組み込まれています。
それはと呼ばれDateTimeます。

$dt = new DateTime('2012-11-22 18:17:33');
$dtNow = new DateTime();

$interval = $dtNow->diff($dt); // php.net/DateInterval
if($interval->invert) 
    echo 'expired';
else 
    echo $interval->format('%m month, %d days, %h hours, %s seconds');

あなたの元の質問に

サーバーの時刻を echo time();
確認するのはデータベースの時刻 を確認するSELECT NOW();

于 2012-11-22T10:35:19.267 に答える