Sql server 2008 安排活动时显示美国假日的日历
我的客户通常提前几个月为客户安排约会。如果预订发生在美国假日日/周内,我的客户希望得到通知,计划日期在美国假日期间(她对假日服务收取更多费用) 我的客户只关心以下日期:Sql server 2008 安排活动时显示美国假日的日历,sql-server-2008,sql-server-2005,coldfusion,Sql Server 2008,Sql Server 2005,Coldfusion,我的客户通常提前几个月为客户安排约会。如果预订发生在美国假日日/周内,我的客户希望得到通知,计划日期在美国假日期间(她对假日服务收取更多费用) 我的客户只关心以下日期: 新年12月30日至1月2日 3月春假周(3月第3周) 复活节周末(该日期每年变化) 五月阵亡将士纪念日周末 七月的独立日周末 九月劳动节周末 感恩节星期一十一月的星期日 圣诞周12月22-28日 我希望尽可能地实现自动化,这样她就不必每年更新数据库,但这不是她的要求,而是我的要求D最好将假日日期/规则输入数据库,或使用规则确
- 新年12月30日至1月2日
- 3月春假周(3月第3周)
- 复活节周末(该日期每年变化)
- 五月阵亡将士纪念日周末
- 七月的独立日周末
- 九月劳动节周末
- 感恩节星期一十一月的星期日
- 圣诞周12月22-28日
TIA在我看来,我会把它写成代码。几年前我发现了它,并根据其许可协议使用了它。它是基于Java的,但我相信如果需要,您可以更改为Coldfusion。它目前列出了66个假期的代码,您可以通过一些操作来计算您需要的周数
在我看来,我会把它写成代码。几年前我发现了它,并根据其许可协议使用了它。它是基于Java的,但我相信如果需要,您可以更改为Coldfusion。它目前列出了66个假期的代码,您可以通过一些操作来计算您需要的周数 我上个月去帮助我们度过了许多假期,但这还不包括所有的假期。这会给你一个良好的开端 你也可以用它来庆祝复活节 一旦你有了阵亡将士纪念日,你可以做一个简单的
dateadd()
,抽出1天和2天的时间来度过整个周末
<cffunction name="getUSBankHolidays" access="public" output="false" returntype="struct" hint="general bank holidays for US">
<cfargument name="iYear" default="#Year(now())#" />
<cfset var currentYear = arguments.iYear />
<!--- Static dates per year --->
<cfset var strResult =
{ NewYears1 = createDate(currentYear,12,30),
NewYears2 = createDate(currentYear,12,31),
NewYears3 = createDate(currentYear,1,1),
NewYears4 = createDate(currentYear,1,2),
Independence = createDate(currentYear,7,4),
Christmas1 = createDate(currentYear,12,22),
Christmas2 = createDate(currentYear,12,23),
Christmas3 = createDate(currentYear,12,24),
Christmas4 = createDate(currentYear,12,25),
Christmas5 = createDate(currentYear,12,26),
Christmas6 = createDate(currentYear,12,27),
Christmas7 = createDate(currentYear,12,28)
} />
<cfset strResult.SpringBreak = createDate(currentYear,3,GetNthOccOfDayInMonth(3,1,3,currentYear)) />
<cfset strResult.MemorialDay = createDate(currentYear,5,(DaysInMonth(createDate(2012,5,1))) - (DayOfWeek(createDate(2012,5,DaysInMonth(createDate(2012,5,1)))) - 2)) />
<cfset strResult.LaborDay = createDate(currentYear,9,GetNthOccOfDayInMonth(1,2,9,currentYear)) />
<cfset strResult.Thanksgiving = createDate(currentYear,11,GetNthOccOfDayInMonth(4,6,11,currentYear)) />
<cfreturn strResult />
</cffunction>
<cfdump var="#getUSBankHolidays()#">
<!-- This code will tell you if the date is holiday or not --->
<cfset Today = '2012-01-01' />
<cfdump var="#NOT arrayIsEmpty(structFindValue(getUSBankHolidays(),createDate(year(Today),month(Today),day(Today))))#">
您还需要从CFLib.org获取一个月内第n次出现的一天。我上个月帮助您度过了许多美国假期,但它并没有涵盖所有假期。这会给你一个良好的开端
你也可以用它来庆祝复活节
一旦你有了阵亡将士纪念日,你可以做一个简单的dateadd()
,抽出1天和2天的时间来度过整个周末
<cffunction name="getUSBankHolidays" access="public" output="false" returntype="struct" hint="general bank holidays for US">
<cfargument name="iYear" default="#Year(now())#" />
<cfset var currentYear = arguments.iYear />
<!--- Static dates per year --->
<cfset var strResult =
{ NewYears1 = createDate(currentYear,12,30),
NewYears2 = createDate(currentYear,12,31),
NewYears3 = createDate(currentYear,1,1),
NewYears4 = createDate(currentYear,1,2),
Independence = createDate(currentYear,7,4),
Christmas1 = createDate(currentYear,12,22),
Christmas2 = createDate(currentYear,12,23),
Christmas3 = createDate(currentYear,12,24),
Christmas4 = createDate(currentYear,12,25),
Christmas5 = createDate(currentYear,12,26),
Christmas6 = createDate(currentYear,12,27),
Christmas7 = createDate(currentYear,12,28)
} />
<cfset strResult.SpringBreak = createDate(currentYear,3,GetNthOccOfDayInMonth(3,1,3,currentYear)) />
<cfset strResult.MemorialDay = createDate(currentYear,5,(DaysInMonth(createDate(2012,5,1))) - (DayOfWeek(createDate(2012,5,DaysInMonth(createDate(2012,5,1)))) - 2)) />
<cfset strResult.LaborDay = createDate(currentYear,9,GetNthOccOfDayInMonth(1,2,9,currentYear)) />
<cfset strResult.Thanksgiving = createDate(currentYear,11,GetNthOccOfDayInMonth(4,6,11,currentYear)) />
<cfreturn strResult />
</cffunction>
<cfdump var="#getUSBankHolidays()#">
<!-- This code will tell you if the date is holiday or not --->
<cfset Today = '2012-01-01' />
<cfdump var="#NOT arrayIsEmpty(structFindValue(getUSBankHolidays(),createDate(year(Today),month(Today),day(Today))))#">
您还需要从CFLib.org获取一个月内第n次出现的一天。数据库表将为您提供更大的灵活性 我帮助维护的数据仓库有一个名为period的表,其中包含主键的日期。其他领域包括假日,一些会计年度的东西,以及其他一些对我们很重要的领域。其他表具有表的外键引用 除了使我们能够轻松地生成必要的报告外,此表还允许我们使用左连接来标识未发生事件的日期。在你的情况下,这样的事情可能会有用
至于更新,我们是手动进行的。当像圣诞节这样的事情发生在周末时,我们会等待别人告诉我们我们是星期五休息还是星期一休息。数据库表会给你更多的灵活性 我帮助维护的数据仓库有一个名为period的表,其中包含主键的日期。其他领域包括假日,一些会计年度的东西,以及其他一些对我们很重要的领域。其他表具有表的外键引用 除了使我们能够轻松地生成必要的报告外,此表还允许我们使用左连接来标识未发生事件的日期。在你的情况下,这样的事情可能会有用
至于更新,我们是手动进行的。当像圣诞节这样的周末来临时,我们等待着被告知我们是星期五还是星期一休息。这就是我最终使用的,并且足够灵活,可以在将来进行修改,我可能仍然会将其转换为一个数据库驱动的系统,带有GUI以添加未来的日期,但就目前而言,这非常有效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css" />
<script>
$(document).ready(function(){
$( ".datepicker" ).datepicker({
changeMonth: true,
changeYear: true
});
});
</script>
</head>
<body>
<cfoutput>
<form action="#cgi.SCRIPT_NAME#" method="post">
Start Date: <input type="text" name="StartDate" class="datepicker" /> (mm-dd-yyyy)<br />
End Date: <input type="text" name="EndDate" class="datepicker" /> (mm-dd-yyyy) <br />
<input type="submit" value="Save Appointment" />
</form>
<cfif structkeyexists(form,'startDate')>
<cfdump var="#form#" expand="no">
<hr />
<cfscript>
/**
* Returns the day of the month(1-31) of an Nth Occurrence of a day (1-sunday,2-monday etc.)in a given month. *
* @param NthOccurrence A number representing the nth occurrence.1-5.
* @param TheDayOfWeek A number representing the day of the week (1=Sunday, 2=Monday, etc.).
* @param TheMonth A number representing the Month (1=January, 2=February, etc.).
* @param TheYear The year.
* @return Returns a numeric value.
* @author Ken McCafferty (mccjdk@yahoo.com)
* @version 1, August 28, 2001
*/
function GetNthOccOfDayInMonth(NthOccurrence,TheDayOfWeek,TheMonth,TheYear)
{
Var TheDayInMonth=0;
if(TheDayOfWeek lt DayOfWeek(CreateDate(TheYear,TheMonth,1))){
TheDayInMonth= 1 + NthOccurrence*7 + (TheDayOfWeek - DayOfWeek(CreateDate(TheYear,TheMonth,1))) MOD 7;
}
else {
TheDayInMonth= 1 + (NthOccurrence-1)*7 + (TheDayOfWeek - DayOfWeek(CreateDate(TheYear,TheMonth,1))) MOD 7;
}
//If the result is greater than days in month or less than 1, return -1
if(TheDayInMonth gt DaysInMonth(CreateDate(TheYear,TheMonth,1)) OR TheDayInMonth lt 1){
return -1;
}
else {
return TheDayInMonth;
}
}
/**
* Returns the date for Easter in a given year.
* Minor edits by Rob Brooks-Bilson (rbils@amkor.com).
*
* @param TheYear The year to get Easter for.
* @return Returns a date object.
* @author Ken McCafferty (rbils@amkor.commccjdk@yahoo.com)
* @version 1, September 4, 2001
*/
function GetEaster() {
Var TheYear=iif(arraylen(arguments) gt 0,"arguments[1]", "Year(Now())");
Var century = Int(TheYear/100);
Var G = TheYear MOD 19;
Var K = Int((century - 17)/25);
Var I = (century - Int(century/4) - Int((century - K)/3) + 19*G + 15) MOD 30;
Var H = I - Int((I/28))*(1 - Int((I/28))*Int((29/(I + 1)))*Int(((21 - G)/11)));
Var J = (TheYear + Int(TheYear/4) + H + 2 - century + Int(century/4)) MOD 7;
Var L = H - J;
Var EasterMonth = 3 + Int((L + 40)/44);
Var EasterDay = L + 28 - 31*Int((EasterMonth/4));
return CreateDate(TheYear,EasterMonth,EasterDay);
}
function LastDayOfMonth(strMonth) {
var strYear=Year(Now());
if (ArrayLen(Arguments) gt 1)
strYear=Arguments[2];
return DateAdd("d", -1, DateAdd("m", 1, CreateDate(strYear, strMonth, 1)));
}
</cfscript>
<cfset StartYear = listlast(StartDate,'/')>
<cfset EndYear = listlast(endDate,'/')>
<cfset HolidaySchedule = structnew()>
<cfloop index="currentYear" from="#dateformat(StartDate,'yyyy')#" to="#dateformat(EndDate,'yyyy')#" step="1">
<cfset val = StructInsert( HolidaySchedule, "Independence (#currentYear#)", createDate(currentYear,7,4) )/>
<cfset val = StructInsert( HolidaySchedule, "New Year (#currentYear#)", createdate(currentYear,1,1) )/>
<cfset val = StructInsert( HolidaySchedule, "Easter (#currentYear#)", GetEaster(currentYear) )/>
<cfset val = StructInsert( HolidaySchedule, "Spring Break (#currentYear#)", createDate(currentYear,3,GetNthOccOfDayInMonth(2,2,3,currentYear)) )/>
<cfset val = StructInsert( HolidaySchedule, "Labor Day (#currentYear#)", createDate(currentYear,9,GetNthOccOfDayInMonth(1,2,9,currentYear)) )/>
<cfset val = StructInsert( HolidaySchedule, "Thanksgiving (#currentYear#)", createDate(currentYear,11,GetNthOccOfDayInMonth(4,6,11,currentYear)) )/>
<cfset val = StructInsert( HolidaySchedule, "Christmas Day (#currentYear#)", createdate(currentYear,12,25) )/>
</cfloop>
<cfdump var="#HolidaySchedule#" expand="no">
<cfset normalweek = 'true'>
<cfloop index="x" from="#startDate#" to="#endDate#" step="1">
Checking date: #dateformat(x,'yyyy-mm-dd')#<br />
<cfif NOT arrayIsEmpty(structFindValue(HolidaySchedule,createDate(year(x),month(x),day(x))))>
<div style="background-color:##009900; color:##ffffff">#dateformat(x, 'mm/dd/yyyy')# is a holiday.</div>
<cfset normalweek = 'false'>
</cfif>
</cfloop>
<cfif normalweek eq 'false'>
Remember to add on the Holiday Fee.
<cfelse>
No additional charges for this appointment.
</cfif>
</cfif>
</cfoutput>
</body>
</html>
无标题文件
$(文档).ready(函数(){
$(“.datepicker”).datepicker({
变化月:对,
变化年:对
});
});
开始日期:(年月日)
结束日期:(年月日)
/**
*返回给定月份内第n个日期(1个星期日、2个星期一等)出现的当月日期(1-31)。*
*@param nth表示第n次出现的数字。1-5。
*@param TheDayOfWeek表示一周中某一天的数字(1=星期日,2=星期一等)。
*@param TheMonth表示月份的数字(1=一月,2=二月等)。
*@param TheYear年年如此。
*@return返回一个数值。
*@作者肯·麦卡弗蒂(mccjdk@yahoo.com)
*@version12001年8月28日
*/
函数getnthoccodayinmonth(第n次出现,星期几,月,年)
{
Var thedayin month=0;
如果(星期日和星期日(创建日期(年,月,1)){
DayinMonth=1+n次出现次数*7+(Week-DayOfWeek(CreateDate(TheYear,TheMonth,1)))MOD 7;
}
否则{
DayinMonth=1+(第n次出现-1)*7+(星期日-星期日(创建日期(年,月,1)))MOD 7;
}
//如果结果大于月内天数或小于1,则返回-1
如果(月日gt月日)(C