0

我正在尝试创建一个将在 1 小时后过期的按钮或链接。

我正在设置访问者使用 cookie 访问页面的时间。

我看到的大多数代码示例只给出了已经过去的时间,而不是剩下的时间。

示例:链接将在 0 小时 30 分 34 秒后过期

这只是一些粗略的代码:

//Setting cookie example
setcookie('previous_time', time(), time()+3600*1);


$current_time = time();
$previous_time = $_COOKIE['previous_time'];

$time_diff = $current_time-$previous_time;

这就是我卡住的地方,我不知道如何将$time_diff时间戳转换为“在 0 小时、30、分钟和 34 秒后过期”之类的格式

非常感谢。

4

3 回答 3

0

我同意 nickb 的观点,即基于 cookie 的内容是可篡改的,但如果链接过期,您会提前一个小时将首次访问标记为:

// set when we are counting down to
setcookie('expires_at', time()+3600, time()+3600);

// we are counting down not up (for "expires in" not "valid since" logic)
$time_diff = $_COOKIE['expires_at'] - time();

$minutes = floor($time_diff / 60);
$seconds = floor($time_diff % 60);

// zero hours since the link will only be valid for one hour max
echo sprintf('expire in 0 hours, %d mins and %d seconds', $minutes, $seconds);

然后你可以这样做:

if($time_diff > 0){
    echo '<a href="...">...</a>';
}
于 2012-07-02T18:16:55.120 回答
0

要格式化您的时差,只需做一些数学运算,因为您$time_diff只是两次之间的秒数:

$hours    = floor( $time_diff / 3600);
$minutes  = floor( ($time_diff / 60) % 60); 
$seconds  = $time_diff % 60;

echo "$hours hours, $minutes minutes, $seconds seconds\n";

因此, 的值20712 将产生

5 hours, 45 minutes, 12 seconds 
于 2012-07-02T18:07:29.797 回答
0

使用您的公式比较时间戳,差异以秒为单位。

所以, $time_diff / 60 让你得到分钟;除以 60 得到小时数;等等

于 2012-07-02T18:10:32.587 回答