需要帮助理解为什么这不起作用。我有一个文本只能在给定的开始日期和时间显示,并在结束的日期和时间被删除。
这是我正在使用的代码,效果很好。文本显示一个月没有问题:
<?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";
}
?>
它没有考虑月份或年份。这是为什么?这只会显示一天而不是一个月的文本。
答案 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()
函数。