我想根据两个日期编写一个 IF 语句。
我有一个 MySQL 数据库(我无法控制该数据库)用于进行测试和考试。
其中一个字段标记为 ClientTime
,并输出进行测试的日期和时间。查询时,典型输出将如下所示 Thu Aug 25 16:47:05 GMT+0100 2011
以下全部发生在 while 循环中
我已经成功使用 strtotime()
将此 MySQL 日期转换为 d/m/Y 格式,因此上面的内容将显示为 25/08/2011,并且我可以显示一个包含所有正确信息的表格日期。
我还有一个 PHP 表单,询问此测试将在多少天后过期,并将其存储在变量 $IMonths
中(从 $_POST['IMonths'] 传递)表单页面) - 一旦我让它工作,php代码将更改为“月”,但我使用天来进行测试 - 因此传递的变量被称为$IMonths。
我还创建了一个 $today = date("d/m/Y");
变量
我可以使用以下命令成功创建新日期$Expiry = date('d/m/Y', strtotime($row['ClientTime'] . "+$IMonths days"));
并可以显示所有结果以及测试日期和到期日期。
然后我想在我的 while 语句中包含一个 if 语句,它是 ($Expiry>$today)
但它不准确 - 没有错误并且更改天数发生变化结果。
我的测试数据库有 5 项考试,日期如下。
Taken 17/08/2011
Taken 17/08/2011
Taken 22/08/2011
Taken 22/08/2011
Taken 24/08/2011
如果我将到期天数设置为 1,我会按预期返回所有结果:
如果我将其设置为 10 天,我会得到两个结果
Taken 17/08/2011
Taken 17/08/2011
我没有收到其他任何日期,即使它们的日期比今天的日期(2011 年 7 月 9 日(我写这篇文章时))要晚,但它们确实会在 9 月份到期。
如果我将到期天数设置为 15,我会得到一个 future 某一天的结果!
Taken 17/08/2011
我希望这是有道理的。我的代码如下:
<?php
// Make The MySQL Server Connection
mysql_connect("localhost", "root", "") or die(mysql_error());
// Make The MySQL Database Connection
mysql_select_db("questions") or die(mysql_error());
$IQuizName = $_POST['IQuizName'];
$IMonths = $_POST['IMonths'];
$result = mysql_query("SELECT * FROM questions.resultsets
WHERE QuizName='$IQuizName'
AND PassFail='Pass'") or die (mysql_error());
$today = date("d/m/Y");
echo "<table border='1'>";
echo "<tr> <th align='left'>Candidate Name </th> <th align='left'>Pass / Fail</th> <th align='left'>Date last Taken</th> <th align='left'>Expires</th> <th align='left'>Today</th> </tr>";
while($row = mysql_fetch_array($result)){
//START of expiry calculation
$Expiry = date('d/m/Y', strtotime($row['ClientTime'] . "+$IMonths days"));
if($Expiry>$today){
echo "<tr><td>";
echo $row['Candidate'];
echo "</td><td>";
echo $row['PassFail'];
echo "</td><td>";
//Date Conversion
echo date('d/m/Y', strtotime($row['ClientTime']));
echo "</td><td>";
echo $Expiry;
echo "</td><td>";
echo $today;
echo "</td><tr>";
};
}
echo "</table>";
echo "<P>";
?>
最佳答案
您的问题是由于 PHP 中的数据类型造成的。当您在 PHP 中调用 date() 函数时,您实际上是将日期格式化为字符串。因此,当您执行 $Expiry = date(blahblah) 时,$expiry 现在是一个字符串。所以你的 if 语句是 if (somestring > someotherstring)。通常,您不会想到比较一个文本 block 来查看它是否大于另一文本 block 。
http://www.php.net/manual/en/function.date.php
解决这个问题的一种方法是使用 strtotime 函数。这将返回基于 UNIX 时间戳的整数来表示日期。
http://www.php.net/manual/en/function.strtotime.php
如果将字符串日期转换为 strtotime,您的 if 语句现在将比较一个数字是否大于另一个数字。这应该可以解决您的问题:)
关于php - php 中的 if 语句使用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336366/