2011-06-02 72 views
3

我需要知道,如果一個$paymentDate(31/12/2010)是$contractDateBegin(01/01/2001)和$contractDateEnd(01/01/2012)之間的有效如何確定日期是否在PHP中的兩個日期之間?

DD/MM/YYYY格式!

+1

每個變量的格式是什麼?它是時間戳嗎? – 2011-06-02 20:16:03

+2

你有沒有嘗試過任何東西?日期是什麼格式? – 2011-06-02 20:16:25

+0

而且,預計在$ contractDateBegin,$ contractDateEnd和$ paymentDate中有哪些日期格式? – Fredrik 2011-06-02 20:16:43

回答

30

由於PHP 5.3:

$paymentDate = DateTime::createFromFormat('d/m/Y', '31/12/2010'); 
$contractDateBegin = DateTime::createFromFormat('d/m/Y', '01/01/2001'); 
$contractDateEnd = DateTime::createFromFormat('d/m/Y', '01/01/2012'); 

if ($paymentDate >= $contractDateBegin && $paymentDate <= $contractDateEnd) 
{ 
    echo "is between\n"; 
} 

您可能需要使用<=調整到<取決於日期是否是排他性的。

+0

有用的小腳本。謝謝。 – gelviis 2013-02-26 16:52:25

3

,如果他們被格式化爲YYYYMMDD您可以檢查是否$paymentDate > $contractDateBegin and $paymentDate < $contractDateEnd

這工作與第一個具有較大格式的任何數字格式。如果您有美國日期,例如MM/DD/YYYY,則不起作用。

+1

也適用於UNIX時間戳和各種其他格式。 – 2011-06-02 20:16:53

+0

@韋斯利:試圖使它更清楚地表明,這適用於大多數時間格式:) – jberg 2011-06-02 20:18:17

+0

基本上可以用數字表示的任何格式,其中後面的日期總是大於先前的格式。非常簡單。 – 2011-06-02 20:19:31

3
$test = strtotime($paymentDate); 
if ($test >= strtotime($contractDateBegin) && $test <= strtotime($contractDateEnd)) 
+0

請注意,如果任一時間被格式化爲UNIX時間戳,則這將失敗。 'strtotime()'將返回FALSE。在OP的編輯之後,看起來這是他想要的。 – 2011-06-02 20:23:00

+0

'strtotime'將不起作用,因爲它認爲'/'的任何內容都是m/d/Y格式。日期需要有破折號才能使'strtotime'工作。 – Matthew 2011-06-02 20:28:02

相關問題