1

データベースからDATETIMEを取得していますが、その日付が30日以内かどうかを確認する必要があります。

$renewal_date = $row['renewal_date'];
$current_time = new DateTime();
$interval = $renewal_date->diff($current_time);

それは私にとってはうまくいきません。

4

4 に答える 4

2

Try something like this

$renewal_date = new DateTime($row['renewal_date']);
$cutoff= new DateTime('+31 days 00:00');


if ($renewal_date < $cutoff && $renewal_date >= new DateTime)
    echo 'Renewal Time!';
else
    echo 'All OK!';

Remove the && condition if you want to show renewal for dates in the past

于 2012-09-08T05:20:49.310 に答える
0
$renewal_date = strtotime($renewal_date); // maybe need it depending of sql format of date

if (abs($renewal_date - time()) < 86400*30)
{
    echo 'less than 30 days from now';
}

編集1

abs($renewal_date - time())time()未来を参照することになっている今からの時間()を与えます。確かに、条件は過去の期間にも役立つ可能性があります...

< 86400*30lapsusは30日より劣っていなければならないと言います...

それは私の2セントでした:)

于 2012-09-08T05:15:07.303 に答える
0

$ row ['renewal_date']がDateTimeオブジェクトであることを確認しますか?

私の印象では、これはDateTimeオブジェクトではなく、データベースから取得する値です。

var_dump($ renewal_date)を試してください。これが日付値を含む文字列である場合は、次のようなものを使用する必要があります。

$renewal_date = new DateTime ($row['renewal_date']);
$current_time = new DateTime();
$interval = $renewal_date->diff($current_time);
于 2012-09-08T05:15:56.353 に答える
0

$renewal_datePHPのDateTimeオブジェクトではありません。var_dump($renewal_date);これを確認するために行うことができます。

例については、 DateTime::diffマニュアルを確認してください。次のようなものを使用して、日付をDateTimeオブジェクトに変換する必要があります。

$datetime1 = new DateTime($renewal_date);

その後、それは動作するはずです。

于 2012-09-08T05:16:06.873 に答える