Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如果日期早于X天_Php_Datetime_If Statement - Fatal编程技术网

PHP如果日期早于X天

PHP如果日期早于X天,php,datetime,if-statement,Php,Datetime,If Statement,我对约会有一些问题。如果我喜欢--> 如果你的活动少于一天,做一些思考 否则,如果你的活动时间超过1天而少于3天,请做其他事情 否则,如果你的活动超过3次,请做其他事情 我需要在PHP这个。我的实际代码是: if (strtotime(strtotime($last_log)) < strtotime('-1 day') ) { $prom .= "" . json_encode('last_activity') . ": " . json_encode("inactive les

我对约会有一些问题。如果我喜欢-->

如果你的活动少于一天,做一些思考

否则,如果你的活动时间超过1天而少于3天,请做其他事情

否则,如果你的活动超过3次,请做其他事情

我需要在PHP这个。我的实际代码是:

if (strtotime(strtotime($last_log)) < strtotime('-1 day') ) {
    $prom .= "" . json_encode('last_activity') . ": " . json_encode("inactive less than 1 day") . ",";
} else if (strtotime($last_log) > strtotime('-1 day') && strtotime($last_log) < strtotime('-3 day')) {
    $prom .= "" . json_encode('last_activity') . ": " . json_encode("inactive more than 1 day and less than 3 days") . ",";
} else if (strtotime($last_log) > strtotime('-3 day')) {
    $prom .= "" . json_encode('last_activity') . ": " . json_encode("inactive more than 3") . ",";
}
if(strotime(strotime($last_log))strotime('-1天')&&strotime($last_log)strotime('-3天')){
$prom.=''.json_encode('last_activity'):''.json_encode('inactive over 3'),“;
}

我想我真的不懂日期的计算。

在这种情况下,日期差异要容易得多:

$datetime1 = date_create(); // now
$datetime2 = date_create($last_log);

$interval = date_diff($datetime1, $datetime2);

$days = $interval->format('%d'); // the time between your last login and now in days
见:

或者以你的方式:

if(strtotime($last_log) < strtotime('-1 day')){
    // it's been longer than one day
}
if(strotime($last_log)
$dateLog=新日期时间($last_log);//格式(如果需要)
$明天=新日期时间(“明天”);
$昨天=新日期时间(“昨天”);
$threeDaysAgo=新日期时间(“-3天”);
如果($dateLog<$Dayed){
//做你想做的
}如果出现其他情况($dateLog>$DateDay&$dateLog<$threeDaysAgo){
//做另一件事
}else if($dateLog>$threeDaysAgo){
// ...
}

文档在这里:

如果您想使用strotime执行此操作,请执行以下操作:

date_default_timezone_set('SOMETHING FOR YOU');

$last_log = '-0.5 day';

$last_log_time = strtotime($last_log);
$minus1day_time = strtotime('-1 day');
$minus3day_time = strtotime('-3 day');

echo $last_log_time . "<br>";
echo $minus1day_time . "<br>";
echo $minus3day_time . "<br>";

if ($last_log_time < $minus3day_time)
{
    echo "inactive more than 3";
}
elseif ( ($last_log_time <= $minus1day_time) && ($last_log_time >= $minus3day_time) )
{
    echo "inactive more than 1 day and less than 3 days";
}
elseif ($last_log_time > $minus1day_time)
{
    echo "inactive less than 1";
}
date\u default\u timezone\u set('SOMETHING FOR your');
$last_log='-0.5天';
$last\u log\u time=strottime($last\u log);
$minus1day_time=strottime(“-1天”);
$minus3day_time=strottime(“-3天”);
回显$last\u log\u时间。“
”; 回显$minus1day\u时间。“
”; 回显$minus3day\u时间。“
”; 如果($last_log_time<$Minus 3day_time) { 回声“不活动超过3”; } elseif($last\u log\u time=$minus3day\u time)) { echo“不活动超过1天,但不超过3天”; } elseif($last\u log\u time>$minus1day\u time) { 回显“不活动小于1”; }
我从您的代码中更改了两件事:

  • 删除strotime(strotime())。不要做两次
  • 对于第二个if,我添加了括号以确保正确计算条件
  • 我颠倒了你的if的顺序。首先检查它是否非常旧(因此<-3)。然后检查它是否在-3和-1之间。然后在-1和现在之间进行检查
  • 添加=。代码中缺少=个案例。因此,如果最后一个_日志为==-1,则它从未被处理过
  • 我将“elseif”替换为“elseif”
  • 我使用变量是因为重新计算strotime是浪费时间的。而且这会降低代码的可读性
然后应用json_encode注释

要解释为什么逻辑颠倒了:

  • 用户的最后一次登录总是在现在之前
  • 假设用户上次登录是在5天前。strotime($last_login)将小于strotime('-1天'),因此if将为true。但这不是OP想要的!他想在这里的情况下,最后登录超过3天
  • 记住,我们是在比较过去的数字,所以越小,越老

1。不要手动构建json文档,我无法想象您认为
json\u encode()
用于什么,但它用于构建整个对象。2.不要将相对数据放入文件中,将绝对数据放入文件中,然后让解码应用程序根据需要进行运算。所以:
json\u encode(['last\u activity'=>$last\u log])
返回
{“last\u activity”:“whatever”}
并处理它。$last\u log的值是多少?如果…?$last_log是数据库中的日期时间,为什么在第一次使用strotime两次呢。。因为是的!谢谢你,这是更好更容易:)谢谢你@k4znlm:答案很好,因为它向你展示了如何使用date_diff。但我建议你的逻辑也需要修正。对于所有小于1天的值,if语句(如您所做的)将始终显示“不活动时间小于1天”。如果5天前有最后一个日志,则If(-5<-1)将返回true,并触发第一个条件。但是应该是“超过3天不活动”。仅供参考,这对我不起作用,只是输出了“d”,我不得不将其更改为
$interval->格式(“%d天”)
$interval->d
。请参阅@WesleySmith感谢您注意到这一点,我在format()函数的参数中添加了%-符号。OP在其if语句逻辑中也犯了错误。所以仅仅更改为DateTime不会产生他想要的结果。是的,这是真的,我的if逻辑有错误。谢谢你对我的解释。我把我的思维放在逻辑上,因为我看不到它。更好的是使用date\u diff。我以前不知道该函数:)
date_default_timezone_set('SOMETHING FOR YOU');

$last_log = '-0.5 day';

$last_log_time = strtotime($last_log);
$minus1day_time = strtotime('-1 day');
$minus3day_time = strtotime('-3 day');

echo $last_log_time . "<br>";
echo $minus1day_time . "<br>";
echo $minus3day_time . "<br>";

if ($last_log_time < $minus3day_time)
{
    echo "inactive more than 3";
}
elseif ( ($last_log_time <= $minus1day_time) && ($last_log_time >= $minus3day_time) )
{
    echo "inactive more than 1 day and less than 3 days";
}
elseif ($last_log_time > $minus1day_time)
{
    echo "inactive less than 1";
}