PHP中的AM / PM比较

时间:2015-05-16 17:57:39

标签: php date datetime time comparison

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

当比较这两个日期/时间时,它显示$ 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;

3 个答案:

答案 0 :(得分:2)

比较这里的两个空白字符串,不会做你期望它做的事情,而不是你比较两个日期的方式。因为你的strings gets converted to an integer比较它们,所以如果你这样做:

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

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

表示您的情况如下:

if(2015 > 2015)

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

1。这并不是你想要的 2.这也不是你比较日期的方式,因为你可以看到日期没有被正确比较

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

<?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

答案 1 :(得分:2)

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

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

strtotime()是您的朋友或DateTime class

答案 2 :(得分:0)

您应该比较整数

,而不是比较字符串
if (strtotime($star_time) > strtotime($end_time)) {
   echo $star_time .">". $end_time;
}
else {
   echo $star_time ."<". $end_time;
}