我正在尝试确定用户上次登录的时间。我当前的方法有效,但有一种更简单的方法来确定这个,以便我可以确定最后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';
}
....
答案 0 :(得分:3)
Try strtotime()(请参阅relative formats它已接受)或更好的DateTime,DateInterval类。
例如,$yesterday
变量创建在日期时间节省附近容易出错。 strtotime()
正确处理此问题:
$yesterday = strtotime('-1 day');
$ last_login检查可以写成:
if (strtotime('-1 week') < $last_login) {
// ...
}
如果你需要支持不同的时区,你最好使用DateTime
个对象。
答案 1 :(得分:1)
查看DateTime和相关类DateTime Book on php.net。 DateInterval 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']
,以便稍后进行模拟。