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

如何使用PHP比较MYSQL中的两个日期,php,mysql,Php,Mysql,我正在尝试用PHP做一件简单的事情,但没有正常运行。 因此,我需要使用PHP比较MYSQL中的两个日期,并显示最早的日期,但PHP中的结果不正确 我在MYSQL数据库中有这个表: CREATE TABLE users ( id int, name varchar(255), date1 date, date2 date, ); +---+---------------+------------+------------+ |id |name

我正在尝试用PHP做一件简单的事情,但没有正常运行。 因此,我需要使用PHP比较MYSQL中的两个日期,并显示最早的日期,但PHP中的结果不正确

我在MYSQL数据库中有这个表:

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>";
$conn=mysqli\u connect($host、$user、$pwd、$db);
$sql=“从用户处选择名称、UNIX\u时间戳(日期1)、UNIX\u时间戳(日期2)”;
$result=mysqli\u查询($conn,$sql);
回声“;
回声“;
回声“;
回声“;
回声“;
回声“;
呼应“姓名”;
回应“日期1”;
回应“日期2”;
呼应“最早的日期”;
回声“;
while($row=mysqli\u fetch\u数组($result)){
回声“;
回显“$行[0]”;
回显“$行[1]”;
回显“$行[2]”;
if(intval($row[1])
这似乎很容易,但这种比较声明并没有正确返回。我只是尝试了以下方法:

1.使用运算符<(无正确返回):

if($row[1]<$row[2]){…}
2.使用intval强制unix\u时间戳为整数(无正确返回):

if(intval($row[1])
有没有办法解决这个问题? 这是一个简单的日期比较(来自MYSQL中日期类型的字段)


感谢您,您可以按存储日期的方式返回日期(而不是转换为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
}
$sql=“从用户中选择名称、日期1、日期2”;
...
while($row=mysqli\u fetch\u数组($result)){
//将date1字符串转换为DateTime对象。
$date1=new\DateTime($row[1]);
//将date1字符串转换为DateTime对象。
$date2=new\DateTime($row[2]);
//创建一个变量(使用三元数)来保存最大日期
//三元平均值=(表达式)?真:假
$LASTEST_date=($date1>$date2)?$date2:$date1;
?>

您可以按存储日期的方式返回日期(而不是转换为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
}
$sql=“从用户中选择名称、日期1、日期2”;
...
while($row=mysqli\u fetch\u数组($result)){
//将date1字符串转换为DateTime对象。
$date1=new\DateTime($row[1]);
//将date1字符串转换为DateTime对象。
$date2=new\DateTime($row[2]);
//创建一个变量(使用三元数)来保存最大日期
//三元平均值=(表达式)?真:假
$LASTEST_date=($date1>$date2)?$date2:$date1;
?>

只需让de数据库为您处理它:

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

只需让de数据库为您处理它:

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

DateTime
在这里是多余的。OP似乎以UNIX时间戳的形式获取日期。为什么需要对象?您应该将ISO8601日期字符串作为字符串进行比较。此外,正如我所说,OP是获取整数。因此,缺少调试细节的问题在这里是多余的
DateTime
似乎以UNIX的形式获取日期不管怎样,时间戳为什么你需要一个对象?你应该把ISO8601日期字符串作为字符串进行比较。此外,正如我所说,OP是获取整数。因此,这使得问题缺少调试细节。这是一个好方法,但我在某些日期中有NULL。在这种情况下,它总是返回NULL。是否可以排除NULL日期?因为你没有提到我在你的原始问题中,这应该是一个新问题。但我会编辑答案。这是一个好方法,但我在某些日期中有NULL。在这种情况下,它总是返回NULL。是否可以排除NULL日期?因为你在原始问题中没有提到它,这应该是一个新问题。但我会编辑答案。
SELECT id, date1, date2, 
  // test if one of the dates (or both) is NULL
  // if so return the one date, or NULL if both are empty
IF(date1 IS NULL OR date2 IS NULL, COALESCE(date1, date2),
  // else compare dates
IF(date1 < date2, date1, date2)
) FROM test