繁体   English   中英

PHP 如果日期早于 X 天

[英]PHP if date is older than X days

我有一些日期问题。 如果喜欢,我需要制作--->

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

我想我真的不明白日期计算。

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
}

如果你想用 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 的顺序。 首先检查它是否很旧(所以 < -3)。 然后检查它是否在 -3 和 -1 之间。 然后在 -1 和现在之间检查。
  • 添加 <= 和 >=。 您的代码中缺少 = 案例。 因此,如果 last_log 是 == -1,则它从未被处理过。
  • 我用“elseif”替换“else if”。
  • 我使用变量是因为重新计算 strtotime 很浪费。 恕我直言,它使代码的可读性降低。

然后应用 json_encode 注释。

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

  • 用户的最后一次登录总是在现在之前。
  • 假设用户的 last_login 是 5 天前。 strtotime($last_login) 将小于 strtotime('-1 days'),因此 if 为真。 但这不是OP想要的! 他希望这里的情况是上次登录时间超过 3 天。
  • 请记住,我们正在比较过去的数字,所以越小,越老。
$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM