php - php 中的 if 语句使用日期

标签 php mysql date if-statement

我想根据两个日期编写一个 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/

相关文章:

php - 如何使用 PHPUnit 测试命令行程序?

mysql - 使用不同的where条件mysql一次更新所有行

php - 为什么我的登录脚本将我发送到空白页面?错误报告于

JavaScript new Date(string) 在完全相同的日期字符串上返回不同的结果

sql-server - 在 T SQL 中查找两个日期之间的日期

mysql - 按生日前的天数对用户排序

php - 来自带有 RequestBody 的 swagger post 调用的空响应

PHP 防止 F5 重新提交 |不带重定向

php - 审核 MySQL 表并仅在批准后显示更改

MySQL 连接优化