2015-10-15 23 views
0

正在查詢我有一個SQL數據庫表命名dbo.Holidays,我使用ColdFusion查詢。我試圖做的目標是標籤不包括假日或週末。所以當一個假期被列出或者它的週末時,它會顯示下一個可用的日子。例如,如果今天(星期四)10/15/15,標籤將顯示「DUE 10/16/15 @ 5:00」。但如果明天(星期五)10/16/15,標籤將顯示「DUE 10/19/15 @ 5:00」。同樣的情況也適用於假期,它將成爲下一個有空的一天,而不是在週末。任何幫助,將不勝感激!jQuery的更換標籤(日期)由CF

我有一個textarea像這樣:

<div id="DTmrw" class="col-xs-12"> 
    <label class="centered" for="DueTmrw">DUE (Tomorrow --10/16/15) @ 5:00</label> 
    <textarea class="form-control" rows="7"></textarea> 
</div> 

CFC功能

<cffunction name="Holidays" access="public" returntype="query"> 
    <cfset var getHolidays = ''> 
    <cfquery name="getHolidays"> 
     SELECT date 
     FROM dbo.Holidays 
    </cfquery> 
    <cfreturn getHolidays> 
</cffunction> 

表:dbo.Holidays
enter image description here

我曾嘗試:

<cfquery name="getHolidays"> 
    select holiday, date 
    from dbo.Holidays 
</cfquery> 

<cfset aryData = [] /> 

<cfloop from="1" to="#getHolidays.recordcount#" index="j"> 
    <cfset ArrayAppend(aryData, DateFormat(getHolidays.date[j], "yyyy-mm-dd")) /> 
</cfloop> 

<cfoutput> 
    <cfdump var="#getHolidays#"> 
</cfoutput> 

<script type="text/javascript" charset="utf-8"> 
var getHolidays = <cfoutput>#serializeJson(aryData)#</cfoutput>; 
console.log(getHolidays); 
</script> 

回答

1

我也有一個數據庫表,標識假期。我用它來編寫一個名爲isBusinessDay的ColdFusion函數,它將日期作爲參數,並返回true或false。函數中的邏輯是使用ColdFusion函數來識別週末和數據庫表以識別節假日的組合。

讓我們假設你已經寫了一個版本,使用自己的數據庫表中的功能。您現在需要從給定日期開始查找下一個工作日。你可以做這樣的事情:

dateIWant = someDateYouCanCreate; 
isBusinessDay = theFunctionYouWrote(dateIWant); 

while (isBusinessDay == false) { 
dateIWant = dateAdd("d", 1, dateIWant); 
isBusinessDay = theFunctionYouWrote(dateIWant); 
} 
+1

維基 - 不是太強悍。 1)獲取日期並從中提取星期幾 - 您的數據庫具有內置的日期(datepart()在SQL中),然後比較它是否爲星期幾或不是星期幾。例如(從內存中),MSSQL從Sun返回1,週六返回7。所以如果你的數據存儲區是2到6,那麼你是在一個工作日。精明? –

+2

爲什麼你需要js? –

+0

我喜歡這種方法。唯一能做的就是創建一個SQL函數,這樣就可以減少訪問數據庫的次數。 –

-1

我沒有測試過這一點,可能有一些拼寫錯誤,但這是你如何能做到這一點的一般概念。

<cffunction name="checkHoliday"> 
    <cfargument name="checkDate" type="numeric" required="yes"> 
    <cfquery name="checkHolidays" datasource="#request.dsn#"> 
    select * from holidays where [date] = '#dateFormat(t,"YYYY-MM-DD")#' 
    </cfquery> 
    <cfif checkHoldays.recordCount gt 0> 
    <cfset temp = checkHoliday(arguments.checkDate++)> 
    <cfelse> 
    <cfreturn arguments.checkDate> 
    </cfif> 
</cffunction> 

<cffunction name="getDueDate" access="public" output="no"> 
    <cfargument name="due" type="string" required="no" default="#now()#"> 
    <cfset var workingDate = fix(arguments.due)++>  
    <cfset t = dayOfWeek(workingDate)> 
    <cfif listFind("5,6",t)> 
    <!--- then we know this is a weekend ---> 
    <cfset t = (7-t) + t> 
    <!--- move to Monday ---> 
    </cfif> 
    <!--- check it our date is on a holiday recursively ---> 
    <cfreturn dateFormat(checkHoliday(t),"YYYY-MM-DD")> 
</cffunction> 
+0

Downvoted沒有使用正確的數據類型的逗號。 –

+0

你的checkHoliday函數應該使用日期,而不是數字。 –