2010-12-20 88 views
0

如果我有两个日期,21/05/201023/05/2010,我怎么才能知道22/05/2006上午07点16分存在于它们之间?日期范围的问题

我正在使用下面的代码来计算最小/最大日期,然后将选择清除表中的所有记录来更新它们。

$today = date('l'); 

    if($today == 'Wednesday'){ 
     $min = date('d/m/Y', strtotime('0 days')); 
     $max = date('d/m/Y', strtotime('+6 days')); 
    }else if($today == 'Thursday'){ 
     $min = date('d/m/Y', strtotime('-1 days')); 
     $max = date('d/m/Y', strtotime('+5 days')); 
    }else if($today == 'Friday'){ 
     $min = date('d/m/Y', strtotime('-2 days')); 
     $max = date('d/m/Y', strtotime('+4 days')); 
    }else if($today == 'Saturday'){ 
     $min = date('d/m/Y', strtotime('-3 days')); 
     $max = date('d/m/Y', strtotime('+3 days')); 
    }else if($today == 'Sunday'){ 
     $min = date('d/m/Y', strtotime('-4 days')); 
     $max = date('d/m/Y', strtotime('+2 days')); 
    }else if($today == 'Monday'){ 
     $min = date('d/m/Y', strtotime('-5 days')); 
     $max = date('d/m/Y', strtotime('+1 days')); 
    }else if($today == 'Tuesday'){ 
     $min = date('d/m/Y', strtotime('-6 days')); 
     $max = date('d/m/Y', strtotime('0 days')); 
    } 

回答

4

DateTime::diff

创建一个DateTime :: DIFF 上午07时16之间21/05/2010 22/05/2006,以及DateTime :: diff之间的23/05/201022/05/2006 7:16 AM

然后,检查第一日期时间:: DIFF是> 0,第二是< 0

更新:使用日期时间:: createFromFormat,这是一个PHP5.3方法

UPDATE2:经过测试的代码示例。产生预期产出。

<?php 
$datetime_lower = DateTime::createFromFormat('d/m/Y', '21/05/2010'); 
$datetime_upper = DateTime::createFromFormat('d/m/Y', '23/05/2010'); 
$datetime_compare = DateTime::createFromFormat('d/m/Y g:i a', '22/05/2006 7:16 AM'); 

var_dump($datetime_lower < $datetime_compare); 
var_dump($datetime_upper > $datetime_compare); 

if ($datetime_lower < $datetime_compare && $datetime_upper > $datetime_compare) { 
    echo " + date is between"; 
} else { 
    echo " date is not between"; 
} 

此外,还有一个程序date_diff功能

+0

我收到以下错误“致命错误:未捕获的异常'异常'消息'DateTime :: __ construct()[datetime.--construct]:无法解析位置0(1)处的时间字符串(15/12/2010):意外字符'在C:\ xampp \ htdocs \ keypad \ pay.php中:269堆栈跟踪:#0 C:\ xampp \ htdocs \ keypad \ pay.php(269):DateTime - > __ construct('15/12/2010' 1 {main}抛出C:\ xampp \ htdocs \ keypad \ pay.php 269行“ – methuselah 2010-12-20 16:31:07

+0

好的,谢谢我要去测试编辑的代码 – methuselah 2010-12-20 16:31:49

+0

我还是得到错误:致命错误:未捕获异常'异常' DateTime :: __ construct()[datetime.--construct]:无法解析位置0(2)处的时间字符串(21/05/2010):C:\ xampp \ htdocs \ keypad \ pay.php中的意外字符:269堆栈跟踪: #0 C:\ xampp \ htdocs \ keypad \ pay.php(269):DateTime - > __ construct('21/05/2010')#1 {main}抛出C:\ xampp \ htdocs \ keypad \ pay.php在线269 – methuselah 2010-12-20 16:34:05

1

爆炸日期和使用的部分在mktime(),以获得他们的时间戳值。然后,检查您的时间戳是否大于或小于其他时间,这很简单。

http://php.net/manual/en/function.mktime.php

伪代码:

$parts= explode("/", "21/05/2010"); 
$timestamp1= mktime($parts[0], $parts[1], ...); 

if($timestamp1 < $timestamp2...) { 
    print "timestamp1 is older then timestamp2"; 
} 
+0

感谢指导。上帝保佑! – methuselah 2010-12-20 16:17:04

2

使用的strtotime

$date1 = strtotime($date1); 
$date2 = strtotime($date2); 
$datefind = strtotime($datefind); 

if ($datefind >= $date1 && $datefind <= $date2) 
+1

仅适用于美国日期 – methuselah 2010-12-20 16:30:25

+0

部分属实。但是,如果您只是使用strtotime()快速解析日期,只需提供[ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)(YYYY-MM-DD)格式的日期,即2010 -05-21而不是21/05/2010。在任何情况下,我都建议使用ISO 8601,因为它不太模糊。 – Garvin 2012-03-06 20:25:12