如果日期到期日期小于当前日期,我的代码应显示最后一个语句,但它显示第二个语句,就好像有效期限大于当前日期一样。我使用自2013年12月1日到期的代码进行了测试,但仍然显示客户端有活跃的折扣。请帮助指出我可能犯错的地方。
<?php if ($totalRows_coupon == 0) { ?>
<table width="96%" border="0">
<tr>
<td bgcolor="#FF0000" class="hint style2">
<div align="center" class="style3">You have entered an invalid discount
code. Leave blank if you don't have any.</div></td>
</tr>
</table>
<?php } else { if ($row_coupon['type']=='percentage' && date("d-m-Y") < strtotime("$edate") && $row_coupon['status']=='active') {?>
<table width="96%" border="0">
<tr>
<td bgcolor="#FFCCCC" class="hint">
<div align="center">You have a <span class="style1"><?php echo $row_coupon['value']; ?>%</span>
discount valid for <?php if ($row_coupon['freq'] == 888) {
echo "<font color=black>unlimited</font>";}else {
echo $row_coupon['freq'];}?> uses. You have <?php if ($row_coupon['freq'] == 888) {
echo "<font color=black>unlimited</font>";}else {
echo $row_coupon['rem'];}?>
uses left to expire on <?php echo $row_coupon['eDate']; ?> </div></td>
<input name="coupon" type="hidden" id="coupon" value="<?php echo $row_coupon['value']; ?>"/>
</tr>
</table>
<?php }elseif (date("d-m-Y") > strtotime("$edate") OR $row_coupon['status']!='active') { ?>
<table width="96%" border="0">
<tr>
<td bgcolor="#FF0000" class="hint style2">
<div align="center" class="style3">This discount code have expired since <?php echo $row_coupon['eDate']; ?>. Please enter an active code or leave blank.</div></td>
</tr>
</table>
<?php }
} ?>
答案 0 :(得分:4)
你比较苹果和橘子:
date("d-m-Y") < strtotime("$edate")
date()
返回 STRING ,表示指定格式的日期,例如04-01-2014
。
strtotime()
返回 INTEGER - 一个unix时间戳,这是自1970年1月1日以来的秒数。
换句话说,您的代码归结为
if('04-01-2014' < 523423423) // picking out some random timstamp value
由于您要将字符串与整数进行比较,因此该字符串将转换为int,从而生成4
,最后会出现
if (4 < 523423423)
这是真的。
答案 1 :(得分:0)
您的else if
声明存在一些问题:
elseif (date("d-m-Y") > strtotime("$edate") OR $row_coupon['status'] != 'active') {
首先date("d-m-Y")
和strtotime("$edate")
的输出不一样,因为date
会给你人类可读的时间,strtotime
会给你一个Unix时间戳。要进行比较,您只需使用time
即可。这是我的修复&amp;清理以及下面的附加说明。
elseif ((time() > strtotime("$edate")) || ($row_coupon['status'] != 'active')) {
除了使用time()
进行检查外,我还更正了使用OR
这个词作为||
的真正PHP逻辑“OR”运算符。阅读有关PHP逻辑运算符here的更多信息。另外,我在括号中包含了每个条件 - (
和)
。即使这只是一个简单的双重检查条件,它可以更容易阅读,解析&amp;调试,如果清楚地描述如此。
答案 2 :(得分:-3)
$row_coupon['status']!='active'
应该是
$row_coupon['status']!=='active'
double equals - 否则你将设置它并使其成立 - 它将完成声明的OR部分。