首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果日期大于X天,则使用PHP

如果日期大于X天,则使用PHP
EN

Stack Overflow用户
提问于 2017-11-07 19:33:12
回答 3查看 9.6K关注 0票数 3

我在约会上有些问题。我需要制造->

如果你的活动少于一天,做点什么吧

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

否则,如果你的活动超过3,做其他动作

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

代码语言:javascript
复制
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") . ",";
}

我觉得我真的不懂日期计算。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-07 19:43:13

在这种情况下,Date_diff要容易得多:

代码语言:javascript
复制
$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

或者以你的方式:

代码语言:javascript
复制
if(strtotime($last_log) < strtotime('-1 day')){
    // it's been longer than one day
}
票数 8
EN

Stack Overflow用户

发布于 2017-11-07 19:58:10

如果您想使用strtotime执行此操作,请如下所示:

代码语言:javascript
复制
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,我添加了括号以确保条件的正确评估。
  • 我颠倒了你的顺序。首先检查它是否很旧(所以< -3)。然后检查它是否在-3到-1之间。那就检查一下-1到现在。
  • 添加了<=和>=。例在您的代码中丢失了。所以如果last_log是== -1,它就不会被处理.
  • 我把“否则的话”改为“其他的”。
  • 我使用变量,因为重新计算所有的strtotime都是浪费的。这使得代码的可读性更低。

然后应用json_encode注释。

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

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

Stack Overflow用户

发布于 2017-11-07 19:48:02

代码语言:javascript
复制
$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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47166075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档