PHP如果日期早于X天

时间:2017-11-07 19:33:12

标签: php datetime if-statement

我有些日期问题。如果喜欢--->

,我需要制作

如果您的活动少于1天,请考虑一下

如果您的活动超过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") . ",";
}

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

3 个答案:

答案 0 :(得分:1)

在这种情况下,Date_diff更容易:

$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

请参阅:http://php.net/manual/en/function.date-diff.php

或以你的方式:

if(strtotime($last_log) < strtotime('-1 day')){
    // it's been longer than one day
}

答案 1 :(得分:0)

如果你想用strtotime来做,那就这样做:

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";
}

我从代码中改变了一些事情:

  • 删除strtotime(strtotime())。不要做两次!
  • 对于你的第二个if,我添加括号以确保正确评估条件。
  • 我颠倒了你的if的顺序。首先检查它是否很旧(所以&lt; -3)。然后检查它是否在-3和-1之间。然后检查-1和现在。
  • 添加&lt; =和&gt; =。您的代码中缺少=个案。因此,如果last_log是== -1,则不会处理它。
  • 我用“elseif”替换“else if”。
  • 我使用变量,因为重新计算strtotime是浪费。它使代码的可读性降低了恕我直言。

然后应用json_encode评论。

解释逻辑逆转的原因:

  • 用户的最后一次登录将始终在此之前。
  • 让我们说用户的last_login是5天前。 strtotime($ last_login)将小于strtotime(' - 1天'),因此if将为true。但这不是OP想要的!他想要的是最后一次登录超过3天的情况。
  • 请记住,我们过去是在比较数字,所以较小,较旧。

答案 2 :(得分:-1)

$dateLog = new DateTime($last_log); // format if needed

$tomorrow     = new DateTime("tomorrow");
$yesterday    = new DateTime("yesterday");
$threeDaysAgo = new DateTime("-3 days");

if ($dateLog < $yesterday) {
        // Do what you want
} else if ($dateLog > $yesterday && $dateLog < $threeDaysAgo) {
        // Do another thing
} else if ($dateLog > $threeDaysAgo) {
        // ...
}

文档在这里:http://php.net/manual/en/datetime.diff.php