2014-01-06 97 views
0

在我的數據庫中,我有屬性「startingdate」,「endingdate」,「daterange」,「numdays」和其他幾個對我的問題沒有任何重要性的屬性。我正在嘗試建立假申請系統,允許用戶申請假。如何從日期範圍獲取當年的天數?

屬性「開始日期」和「結束日期」是相當自我解釋。 「numdays」是從「開始日期」到「結束日期」的天數。至於「日期範圍」,它是從開始日期到結束日期的所有日期,不包括開始日期。例如,如果開始日期是2014-01-01,結束日期是2014-01-03,則「日期範圍」將是「2014-01-02 2014-01-03」。我需要這個php日曆來突出顯示用戶已經申請的日期。

我遇到的問題是我不知道如何找到用戶今年休假的天數。假設用戶在2014年12月30日至2015年1月2日期間申請了假期,「日期範圍」將爲「2014-12-31 2015-01-01 2015-01-02」。我如何找到2014年的天數?

對不起,長期以來的問題。

+0

使用MySQL'YEAR()'函數,日期限制在一個特定的年份。 –

+0

擁有一個包含「開始日期」,「結束日期」,「日期範圍」,「數日」的表似乎是冗餘數據。難道你只需要存儲開始日期和結束日期?然後你可以使用MySQL數據時間函數DATEDIFF()來確定numdays。 daterange和numdays似乎都違反了數據庫規範化的規則。 – AgRizzo

回答

0

大概可以做得更有效率,但我會留下優化它給你。

假設條件是,endingdatestartingdate後:

select startingdate,endingdate, 
case 
when year(startingdate)=year(now()) 
and year(endingdate)=year(now()) 
then datediff(endingdate,startingdate) 
when year(startingdate)=year(now()) 
and year(endingdate)>year(now()) 
then datediff(date(concat(year(now()),'-12-31')),startingdate) 
when year(startingdate)<year(now()) 
and year(endingdate)=year(now()) 
then datediff(endingdate,date(concat(year(now()),'-01-01'))) 
when year(startingdate)<year(now()) 
and year(endingdate)>year(now()) 
then datediff(date(concat(year(now()),'-12-31')),date(concat(year(now()),'-01-01'))) 
else 0 end as daysOffThisYear 
from myTable m;