提问者:小点点

如何使用PHP比较来自MYSQL的两个日期


我正在尝试用PHP做一件简单的事情,但是不能正常运行。 所以,我需要用PHP比较来自MYSQL的两个日期,并显示最早的日期,但PHP中的结果是不正确的。

我在MYSQL DB中有这样一个表:

CREATE TABLE users (
    id int,
    name varchar(255),
    date1 date,
    date2 date,
);

+---+---------------+------------+------------+
|id |name           |date1       |date2       |
+---+---------------+-------------------------+
|1  |ANA            |2005-02-27  |2004-03-27  |
+---+---------------+------------+------------+
|2  |MARIA          |2010-03-08  |2014-11-01  |
+---+---------------+-------------------------+

我使用以下PHP代码:

$conn =  mysqli_connect($host, $user, $pwd, $db);
$sql = "SELECT name, UNIX_TIMESTAMP(date1), UNIX_TIMESTAMP(date2) FROM users ";
$result = mysqli_query($conn, $sql);

echo "<html>";
echo "<head>";
echo "</head>";
echo "<body>";

echo "<table border=1>";
echo "<tr>";
echo "<td><b>Name</b></td>";
echo "<td><b>Date1</b></td>";
echo "<td><b>Date2</b></td>";
echo "<td><b>Oldest Date</b></td>";
echo "<tr>";
while ($row = mysqli_fetch_array($result)) {
   echo "<tr>";
      echo "<td>" . $row[0] . "</td>";
      echo "<td>" . $row[1] . "</td>";
      echo "<td>" . $row[2] . "</td>";
      if (intval($row[1]) < intval($row[2])){
         echo "<td>" . $row[1] . "</td>";
      } else {
         echo "<td>" . $row[2] . "</td>";
      };
   };
   echo "</tr>";
};
echo "</table>";

这似乎很容易,但这种比较的说法并没有正确返回。 我只是尝试了以下这些方法:

1.使用运算符<; (没有正确的返回):

if ($row[1] < $row[2]) {...}

2.使用intval强制unix_timestamp为整数(没有正确的返回):

if (intval($row[1]) < intval($row[2])) {...}

有办法解决这个问题吗? 它是一个简单的日期比较(来自MYSQL中日期类型的字段)。

谢谢


共2个答案

匿名用户

就让de database替你处理吧:

$sql = "SELECT name, date1, date2, IF(date1 < date2, date1, date2) FROM users";

现在$row[3]总是包含最小的日期。

匿名用户

您可以按照日期的存储方式返回日期(而不是转换为unix),并使用DateTime对象检查日期。

$sql = "SELECT name, date1, date2 FROM users";

...

while ($row = mysqli_fetch_array($result)) {

    //convert date1 string to DateTime object.
    $date1 = new \DateTime($row[1]);

    //convert date1 string to DateTime object.
    $date2 = new \DateTime($row[2]);

    //create a variable (using a Ternary) to hold the biggest date
    //Ternary means = (Expression) ? true : false
    $oldest_date = ($date1 > $date2) ? $date2 : $date1;

    ?>
        <tr>
            <td><?= $row[0] ?></td>
            <td><?= $row[1] ?></td>
            <td><?= $row[2] ?></td>
            <td><?= $oldest_date ?></td>
        </tr>
    <?php
}
  • 日期时间
  • 三元