2017-04-06 52 views
1

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

这是我使用的代码,工作得很好。该文本是一个月可见没有问题:

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

难怪你不明白它,如果你没有正确格式化。 – Aloso

+0

随时阐述我缺少的东西请 –

+0

这是一个语言环境问题吗? '“06/04/2017 08:00”'正在被解释为Jun-4(美国mm/dd/yy),而不是您希望的Apr-6(欧洲dd/mm/yy)?如果它有效,我会坚持每年的一个月。在其他答案中有很多日期比较示例,例如[如何比较PHP中的两个日期](http://stackoverflow.com/questions/8722806/how-to-compare-two-dates-in-php) – domwrap

回答

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

'strtotime(date(...))'太复杂了。为什么要生成一个日期,格式为字符串,只是为了再次解析日期?见'时间()' – Aloso

+0

是的,你是对的@Aloso但是当我是职位时,这个解决方案点击了我的想法。你最好使用time(); – webDev

0

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

这里的执行比较date('Y/m/d H:i') >= "2017/04/06 08:00"当PHP做什么:

首先,date()功能被执行,它返回像"2017/04/23 12:51"

字符串由于>=只能比较数字,两个字符串,然后含蓄地浇铸成double。为此,PHP使用strtod函数。这个函数从左到右解析一个字符串。如果它发现的第一件事物(空白除外)是数字/ infinity/NAN,则返回此数字。只要strtod找到一个非数字字符,字符串的其余部分将被忽略。如果strtod未找到号码,则返回0

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


如果要正确比较日期,你必须使用时间戳。为了获得当前时间戳,PHP提供了time()函数。