今回は、カレンダーです。
最初は今月の表示です。本日の部分は紫色になります。
また、
index.cfm?ddate=20140404
とすると、2014年4月が表示され、4日の部分が紫色になります
左上の「<<」を押すと前月が表示され、
「>>」を押すと来月が表示されます。
こちらをクリックしてください。
※海外のホスティングサービスを使用していますので、時間は海外仕様です。
<cfparam name="url.ddate" default="#dateformat(now(),'yyyymmdd')#">
<!---解説
urlからの指定がない場合、本日の日付をセットしています。
--->
<cfset yy=left(url.ddate,4)>
<cfset mm=mid(url.ddate,5,2)>
<cfset dd=mid(url.ddate,7,2)>
<!---解説
年、月、日の変数として分解します。
urlからの変数が年月の場合がほとんどなので、
日の部分はmid関数で取得しました。
日の部分がない場合はヌルとなります。
日の部分までurl指定があった場合は、
日の部分が紫色となります。
--->
<cfset ddate=CreateDate(yy,mm,1)>
<!---解説
月始めの年月日を取得します。
--->
<cfset lastDay=DaysInMonth(ddate)>
<!---解説
月末の日付を取得します。
--->
<cfset weekList="">
<cfloop index="i" from="1" to="#lastDay#">
<cfset weekList=weekList & i>
<cfif i lt lastDay>
<cfset weekList=weekList & ",">
</cfif>
</cfloop>
<!---解説
月末までの日付をリスト形式にします。
ただ単に
1,2,3,4,....,30
とするだけです。
--->
<cfset weekList=RepeatString("0,",DayOfWeek(ddate)-1) & weekList>
<!---解説
1日より前に0をセットします。
2002年11月の場合は、
0,0,0,0,0,1,2,3,4,...,30
となります。
DayOfWeek関数では曜日を数値として返しています。
1(日曜日)~7(土曜日)の範囲の整数です。
--->
<cfset weekList=weekList & RepeatString(",0",7-DayOfWeek(CreateDate(yy,mm,lastDay)))>
<!---解説
月末よりあとに0をセットします。
2002年11月の場合はちょうど土曜日で終わっていますので0が追加されません。
--->
<cfoutput>
<table border="0" cellspacing="0" cellpadding="0" bgcolor="black">
<tr>
<td>
<table border="0" cellspacing="1" cellpadding="1">
<tr align="center" bgcolor="black">
<td bgcolor="Lime">
<a href="index.cfm?ddate=#DateFormat(DateAdd('m',-1,ddate),'yyyymm')#"><<</a></td>
<!---解説
url変数ddateに前月をセットしています。
--->
<td colspan="5" bgcolor="##FF9900">#yy#年#mm#月</td>
<td bgcolor="Lime">
<a href="index.cfm?ddate=#DateFormat(DateAdd('m',1,ddate),'yyyymm')#">>></a></td>
</tr>
<tr align="center" bgcolor="White">
<td><font color="Red">日</font></td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td><font color="Blue">土</font></td>
</tr>
<cfloop index="i" from="1" to="#listLen(weekList)#">
<cfif (i mod 7) eq 1><tr bgcolor="White"></cfif>
<cfset tmp=ListGetAt(weekList,i)>
<cfif tmp eq 0><cfset tmp=" "></cfif>
<cfif tmp eq dd>
<td align="right" bgcolor="Purple"><font color="White">#tmp#</font></td>
<cfelse>
<cfif (i mod 7) eq 1><cfset tmp="<font color='Red'>" & tmp & "</font>"></cfif>
<cfif (i mod 7) eq 0><cfset tmp="<font color='Blue'>" & tmp & "</font>"></cfif>
<td align="right">#tmp#</td>
</cfif>
<cfif (i mod 7) eq 0></tr></cfif>
</cfloop>
<!---解説
カレンダーの日付部分をセットしています。
weekList変数が、7で割ることにより、
うまくカレンダーとして編集できます。
--->
</table>
</td>
</tr>
</table>
</cfoutput>