データベースからDATETIMEを取得していますが、その日付が30日以内かどうかを確認する必要があります。
$renewal_date = $row['renewal_date'];
$current_time = new DateTime();
$interval = $renewal_date->diff($current_time);
それは私にとってはうまくいきません。
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
$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*30
lapsusは30日より劣っていなければならないと言います...
それは私の2セントでした:)
$ 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);
$renewal_date
PHPのDateTimeオブジェクトではありません。var_dump($renewal_date);
これを確認するために行うことができます。
例については、 DateTime::diffマニュアルを確認してください。次のようなものを使用して、日付をDateTimeオブジェクトに変換する必要があります。
$datetime1 = new DateTime($renewal_date);
その後、それは動作するはずです。