【问题标题】:php dates and if statementsphp 日期和 if 语句
【发布时间】:2013-09-09 22:54:46
【问题描述】:

所以,我正在从数据库中获取付款日期,然后在其上添加一年作为到期日。我希望用户在登录时知道他们是活跃还是不活跃。

但是,每次我使用付款尚未过期的人登录时,我都会收到您是非活动会员的消息。有人可以看看我哪里出错了吗?

$paymentdate = strtotime($row[1]);
$paymentexpire = strtotime("+1 year", $paymentdate);
$currentdate = date('Y-m-d');
if($paymentdate != null && $paymentdate <= $currentdate && $currentdate < $paymentexpire){
    $msg = $p->addContent("You are an active member<br>");
}
else{
    $msg = $p->addContent("You are an inactive member<br>");
}

【问题讨论】:

  • 这部分不完全有意义$paymentdate &gt;= $paymentdate,我的意思是大于部分......在第二行中 $paymentdate 已经是一个您不必要地重新铸造的日期。
  • 尝试将条件分成三部分,并用样本数据对每一部分进行测试。你能提供一些样本输入吗?问题可能就在那里。
  • 为什么在$paymentexpire 中使用strtotime($paymentdate)?你在设置$paymentdate时已经这样做了!
  • 检查修改后的代码。
  • strtotime() 返回一个整数时间戳,date('Y-m-d') 返回一个字符串,您无法可靠地比较两者。您应该使用time(),如下面@Sam 的示例,因为它返回一个整数时间戳。

标签: php date comparison


【解决方案1】:

有关 PHP 小提琴示例,请参阅 http://phpfiddle.org/main/code/ips-jgh

这是一个简化的版本,更有意义。如果会员资格的到期日期大于/等于当前时间,则会员资格尚未到期 - 有效。

$paymentdate = strtotime($row[1]);
$paymentexpire = strtotime("+1 year", $paymentdate);

if($paymentdate != null && $paymentexpire >= time()){
    $msg = $p->addContent("You are an active member<br>");
}
else {
    $msg = $p->addContent("You are an inactive member<br>");
}

您可以将日期转换简化为:

$paymentexpire = strtotime("+1 year", strtotime($row[1]));

您修改了答案,以字符串格式包含当前时间。上面的代码只使用了易于理解和比较的 unix 时间戳。

我已经修改了您的示例代码,它在我的机器上运行良好。

<?php

$date = "2012-10-10"; // member is active

$paymentdate = strtotime($date);
$paymentexpire = strtotime("+1 year", $paymentdate);

if($paymentdate != null && $paymentexpire >= time()){
   echo "You are an active member<br>";
}
else {
   echo "You are an inactive member<br>";
}

?>

【讨论】:

  • 像 2013-09-10 一样出现,所以我相信那是 Y-m-d。
  • 再一次,代码是正确的,我无能为力。你print_r()/var_dump()数据库行的输出怎么样?
  • 好的,所以当我将“2012-10-10”放入 $paymentdate 时它可以工作。这意味着我在从数据库中读取日期时遇到了其他问题。感谢山姆的帮助:)。非常感谢。
猜你喜欢
  • 2012-09-19
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多