AM/PM 中的比较 PHP

AM/PM comparison in PHP

$star_time = "2015-05-15 09:30 PM";
$end_time  = "2015-05-15 09:40 AM";

比较这两个 date/time 时显示 $end_time 大于 $star_time 而 $star_time 实际上更大,因为 $end_time早上!!!

为什么比较忽略 AM/PM?

谢谢

if($star_time > $end_time)
echo $star_time .">". $end_time;
else
echo $star_time ."<". $end_time;

像您在此处所做的那样比较两个空白字符串,不会按照您的预期进行,也不是您比较两个日期的方式。因为你的 strings gets converted to an integer 如果你比较它们,所以如果你这样做:

echo $star_time + 0;  //2015
echo $end_time + 0;   //2015

您将看到您的字符串转换为哪个整数。这就是一切,直到一个非数值(在你的例子中是破折号:-)。

表示您的情况如下所示:

if(2015 > 2015)

而且 2015 年并不比 2015 年大。所以你看:

1。这不是你想要的
2. 这也不是您比较日期的方式,因为如您所见,日期没有得到正确比较

只需创建一个 DateTime 对象并比较两个日期的时间戳,例如

<?php

    $star_time = "2015-05-15 09:30 PM";
    $end_time  = "2015-05-15 09:40 AM";

    $start = new DateTime($star_time);
    $end = new DateTime($end_time);

    if($start->getTimestamp() > $end->getTimestamp())
        echo $star_time .">". $end_time;
    else
        echo $star_time ."<". $end_time;

?>

输出:

2015-05-15 09:30 PM > 2015-05-15 09:40 AM

你应该比较整数而不是比较字符串

if (strtotime($star_time) > strtotime($end_time)) {
   echo $star_time .">". $end_time;
}
else {
   echo $star_time ."<". $end_time;
}

您的变量是字符串,您正在使用 > 运算符进行比较。

您需要将字符串转换为时间戳,然后进行比较。

strtotime() is your friend or the DateTime class.