2014-12-04 182 views
0

我正在尝试这一个,它已经有一段时间,因为我上次用PHP编码。检查日期是否在特定的日期范围PHP

我有检查,如果给定的日期是在日期的范围之间的功能:

pr($this->isDateBetween("2014-11-15", "2014-12-05", "2014-06-14")); 

public function isDateBetween($dt_start, $dt_check, $dt_end){ 
     if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){ 
      return true; 
     } else{ 
      return false; 
     } 
    } 

但是好像我越来越false。预期结果应该是true,因为2014-12-05小于2014-06-14

十二月份是不是比六月份这样应该是真的?

另外, 当我将2014-06-14更改为2014-12-14它成为现实。

对不起,我没有用PHP更新。请多多包涵。

编辑

试图将那些的strtotime,但仍然得到错误的结果

+2

你应该找出哪个'dt_start'和'dt_end'是最大/最小的,然后做一个IF语句。您现在的做法是,您指定参数的顺序意味着不接受日期。例如'2014-11-15'是你的开始日期,但是**'2015-06-14'之后是**,这是你的结束日期。 – Jonathon 2014-12-04 17:18:46

+0

此外,中间参数即您检查的日期超出了其他参数指定的范围。 – Jonathon 2014-12-04 17:23:25

+0

谢谢我很困惑。我需要以艰苦的方式学习日期,但不要提前考虑 – 2014-12-04 17:24:23

回答

0

的解决方案存在的位置:

How to check if a date is in a given range?

SOLUTION:

的转换米到时间戳是一种行之有效的方法,使用时间戳,例如时间戳。

$start_date = '2009-06-17'; 

$end_date = '2009-09-05'; 

$date_from_user = '2009-08-28'; 

check_in_range($start_date, $end_date, $date_from_user); 


function check_in_range($start_date, $end_date, $date_from_user) 
{ 
    // Convert to timestamp 
    $start_ts = strtotime($start_date); 
    $end_ts = strtotime($end_date); 
    $user_ts = strtotime($date_from_user); 

    // Check that user date is between start & end 
    return (($user_ts >= $start_ts) && ($user_ts <= $end_ts)); 
} 
+0

没错。 OP的问题似乎是你的链接文章的重复。 – 2014-12-04 18:04:33

0

,因为2014年12月5日低于2014年6月14日预期的结果应该是真实的。

完全错误。代码IS正在工作。 6月14日比12月12日“少”。所以你的12月12日的日期是不是之间的开始/结束日期。它已经超过了范围的最后。

+0

我对年终事物感到困惑,并且提前思考。你是对的。 – 2014-12-04 17:23:46

0

预期结果应该为真,因为2014-12-05小于2014-06-14。

绝对不是。预期结果不是true。它是false,因为"2014-12-05"不小于"2014-06-14"。十二月比六月少?从来没有听说过这种奇特的逻辑。

此外,当我将2014-06-14更改为2014-12-14时,它成为现实。

这是正确的。由于"2014-12-05"肯定小于"2014-12-14",因此它是true5 December明显小于14 December

这与PHP版本或PHP内置方法无关。这完全是关于你的逻辑。

我认为这是你在找什么:

pr($this->isDateBetween("2014-06-14", "2014-11-15", "2014-12-05")); 

public function isDateBetween($dt_start, $dt_check, $dt_end){ 
     if(strtotime($dt_check) >= strtotime($dt_start) && strtotime($dt_check) <= strtotime($dt_end)){ 
      return true; 
     } else{ 
      return false; 
     } 
} 

这将返回true

相关问题