Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

struggling to modify script

Status
Not open for further replies.

tyutghf

Technical User
Apr 12, 2008
258
GB
I have a script that displays a calendar, ideally what I would like to do is place a background color on the cells that is a weekend.

I tried to use the constants that are set up and looped through without any luck, can someone see how I add a bg color to a date that falls on a saturday or sunday?

Thanks

Code:
<!--#include virtual="/include/dbconn.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "[URL unfurl="true"]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">[/URL]
<html xmlns="[URL unfurl="true"]http://www.w3.org/1999/xhtml">[/URL]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style TYPE="text/css">
hr{	color: #FCB033;	height: 1px;}
h1{	background-color: transparent;	color: #00446A;	font-weight: bold;	margin-bottom: 0px;}

  TD.NON {color :#666666; vertical-align: top}

  A.NOEVENT {display: block; height: 15px; width: 20px; color :#999999; background: #ffffff; font-size :12px; font-weight :normal; text-decoration: none; border: 1px solid #CFD1E3; margin: 1px}
  A.NOEVENT:hover{background: #CFD1E3; color :#000000; text-decoration: none;}	

  A.EVENT {display: block; height: 15px; width: 20px; color :#000000; background: #cccccc; font-size :10px; font-weight :normal; text-decoration: none; border: 1px solid #CFD1E3; margin: 1px; overflow: hidden}
  A.EVENT:hover{background: #CFD1E3; color :#000000; text-decoration: underline;}

  A.NORMAL:Link {color :#0000FF; font-weight :normal; text-decoration: none;}
  A.NORMAL:Visited {color :#0000FF; font-weight :normal; text-decoration: none;}
		
		
		.event {background-color: yellow}
</style>
</head>

<body>

<%
'Set the server locale to USA for the date fields on the webserver - DON`T ASK WHY!!
Session.LCID = 1033
%>
<%
	'------------------------------------------------------------
	' This function finds the last date of the given month
	'------------------------------------------------------------
	Function GetLastDay(intMonthNum, intYearNum)
		Dim dNextStart
		If CInt(intMonthNum) = 12 Then
			dNextStart = CDate( "1/1/" & intYearNum)
		Else
			dNextStart = CDate(intMonthNum + 1 & "/1/" & intYearNum)
		End If
		GetLastDay = Day(dNextStart - 1)
	End Function
	
	'-------------------------------------------------------------------------
	' This routine prints the individual table divisions for days of the month
	'-------------------------------------------------------------------------
	Sub Write_TD(sValue, sClass)
		Response.Write "		<TD CLASS='" & sClass & "'> " & sValue & "</TD>" & vbCrLf
	End Sub


	' Constants for the days of the week
	Const cSUN = 1, cMON = 2, cTUE = 3, cWED = 4, cTHU = 5, cFRI = 6, cSAT = 7
	
	' Get the name of this file
	sScript = Request.ServerVariables("SCRIPT_NAME")
	
	' Check for valid month input
	If IsEmpty(Request("MONTH")) OR NOT IsNumeric(Request("MONTH")) Then
	  datToday = Date()
	  intThisMonth = Month(datToday)
	ElseIf CInt(Request("MONTH")) < 1 OR CInt(Request("MONTH")) > 12 Then
	  datToday = Date()
	  intThisMonth = Month(datToday)
	Else
	  intThisMonth = CInt(Request("MONTH"))
	End If
	
	' Check for valid year input
	If IsEmpty(Request("YEAR")) OR NOT IsNumeric(Request("YEAR")) Then
	  datToday = Date()
	  intThisYear = Year(datToday)
	Else
	  intThisYear = CInt(Request("YEAR"))
	End If

	strMonthName = MonthName(intThisMonth)
	datFirstDay = DateSerial(intThisYear, intThisMonth, 1)
	intFirstWeekDay = WeekDay(datFirstDay, vbSunday)
	intLastDay = GetLastDay(intThisMonth, intThisYear)
	
	' Get the previous month and year
	intPrevMonth = intThisMonth - 1
	If intPrevMonth = 0 Then
		intPrevMonth = 12
		intPrevYear = intThisYear - 1
	Else
		intPrevYear = intThisYear	
	End If
	
	' Get the next month and year
	intNextMonth = intThisMonth + 1
	If intNextMonth > 12 Then
		intNextMonth = 1
		intNextYear = intThisYear + 1
	Else
		intNextYear = intThisYear
	End If

	' Get the last day of previous month. Using this, find the sunday of
	' last week of last month
	LastMonthDate = GetLastDay(intLastMonth, intPrevYear) - intFirstWeekDay + 2
	NextMonthDate = 1

	' Initialize the print day to 1  
	intPrintDay = 1

	' Open a record set of schedules
	Set Rs = Server.CreateObject("ADODB.RecordSet")
	
	' These dates are used in the mySQL database, if dates in different format change this bit and maybe locale above
	dFirstDay = intThisYear & "-" & intThisMonth & "-1"
	dLastDay 	= intThisYear & "-" & intThisMonth & "-" & intLastDay

	sSQL = 	"SELECT DISTINCT Start_Date, End_Date, Event_Title FROM tEvents WHERE " & _
					"(Start_Date >='" & dFirstDay & "' AND Start_Date <= '" & dLastDay & "') " & _
					"OR " & _
					"(End_Date >='" & dFirstDay & "' AND End_Date <= '" & dLastDay & "') " & _
					"OR " & _
					"(Start_Date < '" & dFirstDay & "' AND End_Date > '" & dLastDay & "' )"  & _
					"ORDER BY Start_Date"

	'Response.Write sSQL

	set rs = server.CreateObject("ADODB.RECORDSET")
	' Open the RecordSet with a static cursor. This cursor provides bi-directional navigation
	rs.Open sSQL,objConn
	

%>

<br>


	<table WIDTH="140" BORDER="0" CELLPADDING="1" CELLSPACING="0">
		<tr HEIGHT="18" BGCOLOR="Silver">
			<td WIDTH="20" HEIGHT="18" ALIGN="LEFT" VALIGN="MIDDLE"><a HREF="<% =sScript%>?month=<% =IntPrevMonth %>&amp;year=<% =IntPrevYear %>"><<</a></td>
			<td WIDTH="120" COLSPAN="5" ALIGN="CENTER" VALIGN="MIDDLE" CLASS="SOME"><% = strMonthName & " " & intThisYear %></td>
			<td WIDTH="20" HEIGHT="18" ALIGN="RIGHT" VALIGN="MIDDLE"><a HREF="<% =sScript %>?month=<% =IntNextMonth %>&amp;year=<% =IntNextYear %>">>></a></td>
		</tr>
	  <tr>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">S</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">M</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">T</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">W</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">T</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">F</td>
			<td CLASS="SOME" WIDTH="20" HEIGHT="15" VALIGN="BOTTOM">S</td>
	  </tr>
	  <tr><td height="1" colspan="7" style='background-color: #cccccc'></td></tr>
			<%
			' Initialize the end of rows flag to false
			EndRows = False
			Response.Write vbCrLf
			
			' Loop until all the rows are exhausted
		 	Do While EndRows = False
				' Start a table row
				Response.Write "	<tr>" & vbCrLf
				' This is the loop for the days in the week
				For intLoopDay = cSUN To cSAT
					' If the first day is not sunday then print the last days of previous month in grayed font
					If intFirstWeekDay > cSUN Then
						Write_TD LastMonthDate, "NON"
						LastMonthDate = LastMonthDate + 1
						intFirstWeekDay = intFirstWeekDay - 1
					' The month starts on a sunday	
					Else
						' If the dates for the month are exhausted, start printing next month's dates
						' in grayed font
						If intPrintDay > intLastDay Then
							Write_TD NextMonthDate, "NON"
							NextMonthDate = NextMonthDate + 1
							EndRows = True 
						Else
							' If last day of the month, flag the end of the row
							If intPrintDay = intLastDay Then
								EndRows = True
							End If
							
							dToday = CDate(intThisMonth & "/" & intPrintDay & "/" & intThisYear)  
							dTodayFormat = CDate(intPrintDay & "/" & intThisMonth & "/" & intThisYear) 'added to display the date link in usa for the events page.
							
							If NOT Rs.EOF Then
								' Set events flag to false. This means the day has no event in it
								bEvents = False
							  Do While NOT Rs.EOF AND bEvents = False
									' If the date falls within the range of dates in the recordset, then 
									' the day has an event. Make the events flag True
							    If dToday >= Rs("Start_Date") AND dToday <= Rs("End_Date") Then
										' Print the date in a highlighted font
							      Write_TD "<span class='event'>" & intPrintDay & "</span>", "HL"
										bEvents = True
									' If the Start date is greater than the date itself, there is no point
									' checking other records. Exit the loop	
							    ElseIf dToday < Rs("Start_Date") Then
										Exit Do
									' Move to the next record
									Else	
								    Rs.MoveNext
									End If
							  Loop
								' Checks for that day
								Rs.MoveFirst
							End If
							
							' If the event flag is not raise for that day, print it in a plain font
							If bEvents = False Then
								Write_TD "<span class='noevent'>" & intPrintDay & "</span>", "SOME"
							End If
						End If 
						
						' Increment the date. Done once in the loop.
						intPrintDay = intPrintDay + 1
					End If
				
				' Move to the next day in the week
				Next
				Response.Write "	</tr>" & vbCrLf
				
			Loop 
			Rs.Close
	 	Set Rs = Nothing
		%>
	</table>


</body>
</html>
 
Use the weekday() function on the date, if it is 1 or 7 then use a bgcolor 1 otherwise user bgcolor 2

Here's a code snippit that will display today's date + the next 2 weeks highighting the weekends in gray:

Code:
<%
	today = date() ' get today's date
	for ndx = 0 to 13 ' get the dates for the next 14 days (0-13)
		dayOfWeek = weekday(today + ndx) ' the the day of the week for today + the index
		strBG = "#FFFFFF" ' by default, the bg is white
		if dayOfWeek = 1 or dayOfWeek = 7 then ' if it's 1 (Sunday) or 7 (Saturday)
			strBG = "#cccccc" ' set the background color to gray
		end if
		' write the date to the screen
		response.write "<span style=""background:" & strBG & ";"">" & today + ndx & "</span><br />" & vbcrlf
	next
%>

--------
GOOGLE is a great resource to find answers to questions like "how do i..."

If you don't know exaclty what you want to do or what to search on, try Google Suggest: --------
I have recently been semi-converted to ensuring all my code (well most of it) works in both javascript and non-javasc
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top