更简单的PHP日期计算方法?

时间:2013-06-03 19:14:00

标签: php date

我正在尝试确定用户上次登录的时间。我当前的方法有效,但有一种更简单的方法来确定这个,以便我可以确定最后X小时等?

这是我目前使用的:

$last_login_di = getdate($last_login);

$now = time();
$now_di = getdate($now);
$today = mktime(0,0,0,$now_di['mon'],$now_di['mday'], $now_di['year']);
if ($last_login > $today) {
    return 'Online Today';
}

$yesterday = $now-86400;
$yesterday_di = getdate($yesterday);
$yesterday = mktime(0,0,0,$yesterday_di['mon'],$yesterday_di['mday'], $yesterday_di['year']);
if ($last_login > $yesterday) {
    return 'Online Yesterday';
}

if (($now - $last_login < 604800) ) {
    return 'Online This Week';
}

....

5 个答案:

答案 0 :(得分:3)

Try strtotime()(请参阅relative formats它已接受)或更好的DateTimeDateInterval类。

例如,$yesterday变量创建在日期时间节省附近容易出错。 strtotime()正确处理此问题:

$yesterday = strtotime('-1 day');

$ last_login检查可以写成:

if (strtotime('-1 week') < $last_login) {
    // ...
}

如果你需要支持不同的时区,你最好使用DateTime个对象。

答案 1 :(得分:1)

查看DateTime和相关类DateTime Book on php.netDateInterval class对您来说可能特别有用。

答案 2 :(得分:1)

你如何得到约会?使用MySQL?使用UNIX_TIMESTAMP作为日期,例如SELECT UNIX_TIMESTAMP(last_login) AS last_login_timestamp FROM ...然后你可以用PHP更好地计算(使用date_diff)

答案 3 :(得分:0)

我觉得你的代码很好。但是$yesterday var是错误的。 它应该是:

$yesterday = $today - 86400;

在您的代码中$yesterday表示$a_day_ago

上周一样。

答案 4 :(得分:0)

你应该大量使用PHP内置的日期对象。

$now = new DateTime();
$yesterday = new DateTime('yesterday');
$lastWeek = new DateTime('last week');

现在,您可以使用基本比较运算符来获得所需的任何比较逻辑:

if ($last_login > $now) {
    ...
} else if ($last_login > $yesterday) {
    ...
} else if ($last_login > $lastWeek) {
    ...
} else {
    ...
}

如果您选择不使用这些对象,请尝试避免使用time()功能。这使单元测试变得不可能。测试不应该依赖于环境。

请改用$_SERVER['REQUEST_TIME'],以便稍后进行模拟。