2009-11-26 143 views
0

嗨,大家好我想知道如果有人能幫助我的以下內容:日期用PHP差異

我有兩個不同的字段中輸入兩個日期>的startDate和結束日期。

以它們輸入我想顯示一個警告,如果:

  • 第二個是第一個之前的日期。所以這是錯誤的。
  • 而第一個和第二個之間的最小差距在一年中的某個時間段至少爲3天,而在其他時間段爲7天。

我正在考慮編寫一個PHP函數,但是如何在第二次輸入日期後立即調用它?

許多許多感謝您的幫助 弗朗西斯

+1

不,這是StackOverflow,其中像這樣的誠實問題由愛好者回答。 – 2009-11-26 11:14:38

回答

1

將您的日期轉換爲Julian daygregoriantojd

/** 
* Get the Julian day of a date. The Julian day is the number of days since 
* January 1, 4713 BC. 
*/ 
function datetojd($date) 
{ 
    return gregoriantojd(idate('m', $date), 
         idate('d', $date), 
         idate('Y', $date)); 
} 

// you can use strtotime to parse a lot of date formats, assuming they are text 
$startDate = strtotime('22nd Nov 2009'); 
$finishDate = strtotime('26nd Nov 2009'); 

$diff = datetojd($finishDate) - datetojd($startDate); 

if ($diff < 0) { 
    // oops, $finishDate is before $startDate 
} 
else { 
    // check $diff is at least 3 or 7 depending on the dates 
} 
+0

小記:改爲使用格雷戈裏的caldar,他也可以在unix時間戳裏轉換日期 – Strae 2009-11-26 11:55:02

+0

謝謝Alex,我會對你的建議。 – frapet 2009-11-26 16:41:20

1

請在使用JavaScript客戶端的檢查。

然後執行相同的檢查服務器端,可以在表單提交後顯示一條消息(對於少數用戶使用Javascript運行禁用?)。

0

1°的情況下:

SELECT [whatever you need from the table] WHERE endDate < startDate 

2°的情況下:

SELECT [whatever you need from the table] WHERE (endDate - startDate) >= IF([select that define in wich period of the year the data are],3, 7) 

本病的做的伎倆,但可能你的問題不能得到解決SQL端。

請更好地描述你需要做的事情。

編輯:

好,然後根據別人的建議,首先檢查被JS HTEM(爲了方便,而不是安全:從未對JS驗證只依賴!)

使用strtotime爲比較/操作。

EDIT2(最後): 圍棋與Alex's Answer

+0

日期尚未輸入數據庫。他們會,如果他們是正確的。我需要做的唯一事情是在輸入數據庫之前檢查輸入的日期是否正確。 – frapet 2009-11-26 11:17:12

0

我不知道你是否能儘快進入第二日稱,除非你重新載入頁面或對另一功能頁面可能會有點複雜

我會檢查日期的方式是使用php的mktime函數,它會給你unix時間。那麼如果第二個數字小於第一個數字,第二個數字在前,如果第二個數字小於第一個+ 3 * 24 * 60 * 60(3天內的秒數),那麼它不相隔3天