需要帮助才能理解php函数

时间:2017-04-06 22:38:07

标签: php function date

需要帮助理解为什么这不起作用。我有一个文本只能在给定的开始日期和时间显示,并在结束的日期和时间被删除。

这是我正在使用的代码,效果很好。文本显示一个月没有问题:

<?php 
     if ( date('Y/m/d H:i') >= "2017/04/06 08:00" && 
          date('Y/m/d H:i') <= "2017/05/06 20:00" ) { 
         echo "$text_1"; 
     } else { 
         echo "$text_2"; 
     }
?>

这就是我希望能够写出日期的方式,但它并不像它应该的那样工作:

<?php 
     if ( date('d/m/Y H:i') >= "06/04/2017 08:00" && 
          date('d/m/Y H:i') <= "06/05/2017 20:00" ) { 
         echo "$text_1"; 
     } else { 
         echo "$text_2"; 
     }
?>

它没有考虑月份或年份。这是为什么?这只会显示一天而不是一个月的文本。

2 个答案:

答案 0 :(得分:0)

将日期更改为时间戳,然后进行比较。格式无关紧要

if ( strtotime(date("Y-m-d H:i")) >= strtotime("06/04/2017 08:00") && 
    strtotime(date("Y-m-d H:i")) <= strtotime("06/05/2017 20:00" )) { 
    echo "$text_1"; 
} 
else { 
    echo "$text_2"; 
}

现在不管格式是"Y-m-d H:i"还是d/m/Y H:i。你可以做任何甲酸盐。

您还可以执行以下操作

if ( strtotime(date("d/m/Y H:i")) >= strtotime("06/04/2017 08:00") && 
    strtotime(date("d/m/Y H:i")) <= strtotime("06/05/2017 20:00" )) { 
    echo "aaa"; 
} 
else { 
    echo "bbb"; 
}

日期格式无关紧要,当您尝试比较日期时,将其转换为秒,然后进行比较。
只需要花费很多strtotime()方法并做例子,然后看看。

答案 1 :(得分:0)

问题是您使用>=<=比较字符串,这在大多数情况下是不可能的。

以下是PHP在执行比较时所执行的操作date('Y/m/d H:i') >= "2017/04/06 08:00"

首先,执行date()函数,返回类似"2017/04/23 12:51"

的字符串

由于>=只能比较数字,因此两个字符串都会隐式地转换为double。为此,PHP使用strtod函数。此函数从左到右解析字符串。如果它找到的第一件事(除了空白)是一个数字/ infinity / NAN,则返回此数字。只要strtod找到非数字字符,就会忽略字符串的其余部分。如果strtod找不到数字,则会返回0

在这种情况下,strtod仅返回年份,因为它不了解/的含义,因此忽略了一年后的所有内容。

如果您想要正确比较日期,则必须使用时间戳。要获取当前时间戳,PHP提供time()函数。