2015-10-15 22 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函数应该使用日期,而不是数字。 –