我从数据库中获取了DATETIME,我需要能够检查该日期是否在30天之内。
$renewal_date = $row['renewal_date'];
$current_time = new DateTime();
$interval = $renewal_date->diff($current_time);
这对我来说不起作用。
答案 0 :(得分:2)
尝试这样的事情
$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!';
删除&amp;&amp;条件,如果您想要显示过去的日期续订
答案 1 :(得分: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*30
说lapsus必须低于30天......
这是我原因的2美分:)
答案 2 :(得分:0)
你确定$ row [&#39; renewal_date&#39;]是一个DateTime对象吗?
我的印象是,这是您从数据库而不是DateTime对象获取的值。
尝试使用var_dump($ renewal_date),如果这是包含日期值的字符串,则应使用以下内容:
$renewal_date = new DateTime ($row['renewal_date']);
$current_time = new DateTime();
$interval = $renewal_date->diff($current_time);
答案 3 :(得分:0)
$renewal_date
不是PHP DateTime对象。您可以var_dump($renewal_date);
进行验证。
查看DateTime::diff手册以获取示例。您将要使用以下内容将日期转换为DateTime对象:
$datetime1 = new DateTime($renewal_date);
然后它应该工作。