为什么在PHP中条件if($ today< = $ ends)当$ today = $结束变量时它不起作用?

时间:2014-02-27 20:12:23

标签: php validation datetime if-statement conditional-operator

我遇到了问题,条件if ($today <= $ends)无法正常工作,因为它会在发生这种情况时打印出来。它只是整个条件中不起作用的部分,并且仅当$ today value date与$ end date value相同时。

总条件为:if(($today >= $starts) && ($today <= $ends)){

这里是我正在使用的代码:

<?php
    $old_format_starts = $entity->field_video_available_d[LANGUAGE_NONE][0]['value'];
    $old_format_ends   = $entity->field_video_until[LANGUAGE_NONE][0]['value'];

    $starts = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_starts);
    $ends   = DateTime::createFromFormat('jS F Y H:i:s', $old_format_ends);
    $today  = new DateTime() ;
    print $starts->format('Y-m-d');  it´s printing 2013-12-29
    print $ends->format('Y-m-d');    it´s printing 2014-02-27
    print $today->format('Y-m-d');   it´s printing 2014-02-27
if(($today >= $starts) && ($today <= $ends)){
        //Do your thing
   print render(field_view_field('node', $entity, 'field_concert_url', array('label'=>'hidden',))); 
    }
?>

只有当$ends变量的值与今天日期相同时才会出现问题,然后整个条件的这部分不起作用:($today <= $ends)我知道它是没有工作,因为它没有打印这个=&gt; print render(field_view_field('node', $entity, 'field_concert_url', array('label'=>'hidden',)));它应该打印即使$today = $ends.

如果今天是$ends变量的前一天,那么只打印和工作一切,但如果&today = $ends所以同一天那么它就不会打印任何内容!我不知道为什么?因为条件是<=,而不仅仅是<

我还尝试以下一种方式放置条件,想知道双(() ())括号是否影响某些东西:

  if($today >= $starts && $today <= $ends){

但它也不起作用!请帮忙!!在此先感谢!!

所以它在以下情况下起作用:

$starts = 2013-12-29
$ends = 2014-02-28
$today = 2014-02-27

但在以下情况下无效:

$starts = 2013-12-29
$ends = 2014-02-27
$today = 2014-02-27

日期值正在打印好,只有条件的一部分:($today <= $ends)不起作用,实际上它只是<=不起作用但是如果条件只是<然后就行了。

请帮助!!!

谢谢大家的快速帮助!!!

3 个答案:

答案 0 :(得分:0)

获取$ starts和$以相同的格式结束。变化

$starts = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_starts);
$ends   = DateTime::createFromFormat('jS F Y H:i:s', $old_format_ends);

为:

$starts = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_starts);
$ends   = DateTime::createFromFormat('Y-m-d H:i:s', $old_format_ends);

答案 1 :(得分:0)

回应timestamps并检查它们:

$today = 1393532415
$ends  = 1393480800

由于您没有提供任何时间信息,因此$ends将是00:00的日期。

答案 2 :(得分:0)

不是包含时间部分的$ start,$ end和$ today对象。打印时,只打印日期部分。

在下方打印以查看$ ends和$ today是否完全相同

print $ends->format('Y-m-d H i s');    
print $today->format('Y-m-d H i s');