0

次の MYSQL SELECT コードを php コードに変換しようとしています。DATEDIFF(date, NOW()) <= 31基本的に、日付が 31 日以下の場合は残りを行います。

これまでのところ、私がやったことは次のとおりです

$today = new DateTime('now');
$date = $row['date'];
$diff = date_diff($date,$today);

内部より if サイク​​ルには次の条件があります。if ($diff <= 31)

私のSql日付列は、DateTimeではなく日付としてのみ指定されています 次のエラーが発生し、日付のみを計算する方法を知りたいです

Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299
bool(false) 
Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299
bool(false)

以下の回答が機能しない追加情報は、SQLクエリで日付を事前にフォーマットしていることですDATE_FORMAT(date,'%d %b %Y') as date

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

2

DateTimeデータベースのデータをオブジェクトに変換する前に、そのデータもオブジェクトに変換する必要がありますdate_diff()

$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = date_diff($date,$today);

since$diffDateIntervalオブジェクトであり、日コンポーネントのみを気にすることに注意してください。次のように評価できます。

if ($date->days <= 31) {
    // do something
}
于 2013-10-14T16:51:24.637 に答える
1

試す:

$today = new DateTime('now');
$date = new DateTime($row['date']);
$diff = $date->diff($today)->days;

date_diff は、両方の引数が DateTime オブジェクトであることを想定しています。それはそれについて不平を言っていることです。date_diff または Datetime::diff が DateInterval を返す場合、days メンバ変数から日数を取得できます

于 2013-10-14T16:46:32.410 に答える
0

アルゴリズムは次のとおりです。

    $then = new DateTime('2010-05-30');//example, you could use $row['date']
    $now = new DateTime();//now
    $delta = $now->diff($then);

    $data = array(
        'year' => $delta->y,
        'month' => $delta->m,
        'day' => $delta->d,
        'hour' => $delta->h,
        'minute' => $delta->i,
        'second' => $delta->s
    );

    //now 
    if($data['day'] <= 31)
    {
       //do the stuff
    }
于 2013-10-14T16:56:27.470 に答える