PHP日期之间的差异


PHP difference between dates

我正在开发游戏,我需要向玩家展示,他有多少天受到保护。这是我现在的代码:

if(user::loged()){
  $protect = (60*60*24*8) - (time() - user::info['reg_date']);
  $left = date("n",$protect);
  if($left > 0) echo "You are protected for $left days!";
}

对于第一个(test)用户reg_date是1394883070(15.3.2014 11:31)。所以它应该输出

You are protected for 7 days!

但是我得到了

You are protected for 1 days!

任何想法?

你应该这样做:

$days_since_registration = (time() - user::info['reg_date'])/(24*3600)

date()仅对Unix时间戳有用。时间戳的差异是以秒为单位的时间间隔,如果您使用它作为时间戳,则使用1970年的日期或类似的情况。

您设置了$left为月数。

n是月份的数字表示形式,不带前导零- http://php.net/date

我会做

if(user::loged()){
  $protect = 691200 - (time() - user::info['reg_date']);
  $left = ceil($protect / 86400);
  if($left > 0) echo "You are protected for $left days!";
}
<?php
   $protect = (60*60*24*8) - (time() - user::info['reg_date']);
   $left = ltrim(date("d",$protect), 0);
   if($left > 0) echo "You are protected for $left days!";
   // Prints "You are protected for 7 days!"
?>