2010-12-20 115 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