【问题标题】:PHP difference between datesPHP日期之间的差异
【发布时间】:2014-04-21 20:56:59
【问题描述】:

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

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!";
}

对于第一个(测试)用户 reg_date 是 1394883070 (15.3.2014 11:31)。所以它应该打印

You are protected for 7 days!

但我明白了

You are protected for 1 days!

有什么想法吗?

【问题讨论】:

标签: php


【解决方案1】:

您已将 $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!";
}

【讨论】:

  • 仍然像 Lajos Veres 所建议的那样,在这里使用日期是错误的。
【解决方案2】:

你应该这样做:

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

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

【讨论】:

    【解决方案3】:
    <?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!"
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多