1

形式の日付と時刻の文字列があります2013-07-01 19:10:05 (Y-m-d H:i:s)日時が格納されているデータベースからデータを出力するとき、その日時から 3 日経過しているかどうかを確認したい。

例: データベースに格納されているのは2013-07-01 00:00:00です。その3日後以降の保存日時2013-07-03 00:00:00.

それが本当なら、テキストをエコーし​​たいです。

私は次のことを試しましたが、私は完全に航海していると思います。

if( strtotime('-3 days') < strtotime($row["orderdatetime"]) ) {
   echo " <img src='imgs/warning.png' ></td >";
}

どんな種類の助けにも感謝します!

アンドレアス

編集:

これは私のPHPスクリプトがどのように見えるかです。

if ($row["confirmeddatetime"] == "0000-00-00 00:00:00" ) {
        $db_datetime = new DateTime($row['orderdatetime']);
        $db_plus_three = $db_datetime->add(new DateInterval('P3D'));
        $now_datetime = new DateTime();
        if ($db_plus_three < $now_datetime) {
            echo " <img src='imgs/warning.png' ></td >";
        } else {
            echo "</td >";
        }

何かが間違っているかどうかを特定できる人はいますか?

4

5 に答える 5

1

おそらく最も簡単な方法は、データベースから直接 UNIX 時間を取得することです (mysql を想定):

SELECT *, UNIX_TIMESTAMP(orderdatetime) AS ordertimestamp...

あなたの比較では、あなたはただ必要です

if( strtotime('-3 days') < $row["ordertimestamp"] ) {
   echo " <img src='imgs/warning.png' ></td >";
}
于 2013-07-02T21:59:24.907 に答える
0

実際、あなたの2番目の例は私にとってはうまくいきますadd()。関数には注意してください。値自体を更新します。これは、私が自分で使用する方法と同様の例です。

/**
 * Checks if the elapsed time between $startDate and now, is bigger
 * than a given period. This is useful to check an expiry-date.
 * @param DateTime $startDate The moment the time measurement begins.
 * @param DateInterval $validFor The period, the action/token may be used.
 * @return bool Returns true if the action/token expired, otherwise false.
 */
function isExpired(DateTime $startDate, DateInterval $validFor)
{
  $now = new DateTime();

  $expiryDate = clone $startDate;
  $expiryDate->add($validFor);

  return $now > $expiryDate;
}

// how to use it
$startDate = new DateTime('2013-06-16 12:36:34');
$validFor = new DateInterval('P3D'); // valid for 3 days
$isExpired = isExpired($startDate, $validFor);
于 2013-07-03T19:51:10.190 に答える
0
SELECT (orderdatetime <= NOW() + INTERVAL 3 DAY) AS threedays ...

3 日が経過したかどうかにかかわらず、1/0 の true/false 値が得られます。PHP でこのような比較を行わないことをお勧めします。mysql で日付 -> 文字列 -> int -> 日付変換チェーンを強制することになり、mysql で直接比較を行うだけで多くの CPU サイクルが浪費されるからです。

于 2013-07-02T22:01:53.553 に答える
0

strtotime は、時間文字列を整数の秒数であるタイムスタンプに変換します。時間から 3 * 86400 (1 日の秒数) を引いたものと比較してください。

于 2013-07-02T21:59:39.830 に答える