当用户登录他的帐户时,我想计算该用户已连续多少天。
为此,我将时间戳存储在$loginSince
并使用以下公式计算连续天数:
$consecutiveDays = (int)((time() - $loginSince) / DAY) + 1;
问题在于这是以秒为单位的,这意味着:
我希望得到真正的结果日,这意味着如果用户在以下时间登录:
柜台应该说3,因为他在三个连续的日子里进来了。根据我目前的公式,这不会起作用,因为计数器将在第1天和第2天之间重置。
任何人都可以建议如何处理这个问题。
答案 0 :(得分:0)
也许使用date('z'),因为这应该只是给你一天而不是时间?
答案 1 :(得分:0)
发布我制作的解决方案。它基于 Ed Heal 的想法,总是比较固定时间。我选择了午夜。之后,我构建了interval
,以便处理年份变化和条纹超过一年
$loginSince = $this->dailyLoginSince($account);
// Create midnight date of the moment the login-streak started
$loginSinceMidnight = strtotime(date('Y-m-d',$loginSince).' 00:00:00');
// We create the difference between the two dates, both at midnight
$numericDayLoginSince = new DateTime();
$numericDayLoginSince->setTimestamp($loginSinceMidnight);
$numericDayNow = new DateTime();
$timestamp = strtotime('today midnight');
$numericDayNow->setTimestamp($timestamp);
$interval = $numericDayLoginSince->diff($numericDayNow);
$loginSinceDays = $interval->format('%a'); // %a = Number of days
// +1 because it seems to be more thrilling, that we already got one day
// by just logging in for the first time.
return $loginSinceDays + 1;