我的数据库中存有日期(due_date) 我想编写一个脚本来检查due_date是否在接下来的3天内
从在线检查(谷歌)我发现了一些代码,但它似乎没有用,见下文
if (time() - filemtime($due_date) >= 3 * 86400)
{
echo" Invoice $id is due in the next 3 days<br />";
}
else
{
echo" Invoice $id not due in the next 3 days </br>";
}
$ due_date包含格式为01/01/2015
的日期有人可以帮帮忙吗? P.s我是新手!
由于
答案 0 :(得分:2)
使用strtotime()将日期字符串转换为unix时间戳,并相应地编辑if语句:
$seconds_to_expire = strtotime($due_date) - time();
if ($seconds_to_expire < 3*86400) {
...
请注意,m / d / y或d / m / y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),那么美国m / d / y假设;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式(参见this)。您可能希望将日期转换为Y-m-d格式:
$due_date_ymd = date('Y-m-d', strtotime(str_replace('/', '-', $due_date));
$seconds_to_expire = strtotime($due_date_ymd) - time();
if ($seconds_to_expire < 3*86400) {
...
答案 1 :(得分:1)
更改
filemtime($due_date)
到
strtotime(str_replace('/', '-', $due_date))
如果第一天出现,您必须将/
更改为-
,否则php会假设首先是月份!
答案 2 :(得分:0)
您可以将DB日期值(格式为&#39; yyyy-mm-dd&#39;)转换为DateTime对象,然后进行比较:
$d = DateTime::createFromFormat('Y-m-d', $due_date);
$d->modify('-3 days'); // subtract 3 days from due date
if ($d < new DateTime()) {
echo 'date is due within 3 days';
}
注意:
new DateTime()
将为您提供当前日期。$due_date
是格式为&#39; yyyy-mm-dd&#39;的字符串,如果它是数据库中的Date列,则应该得到。由于您评论$due_date
是&#34;日期格式为01/01 / 2015&#34;,您可以轻松调整代码:更改createFromFormat
函数中的格式说明符从'Y-m-d'
到'd/m/Y'
。
答案 3 :(得分:0)
if (strtotime($due_date)+60*60*24*3 =< time()+60*60*24*3) {
echo "Is due in the next 3 days"
} else {
echo "Is not due in the next 3 days"
}