Someone from work was using an excel spreadsheet for making a simple calendar which displays the day of the year. every year, this calendar was updated, mostly by hand. one day, someone else requested this calendar for prior years, and we didn’t have them. so this generator was born. and man, was it simple to make.
note: in the app, i am using “julian day” to mean “day of the year” even though it isn’t technically correct. it’s just that everyone seems to make that association.
below is the ASP version, but I also converted this to PHP, and will post it when I get a chance.
ASP CODE
the main form just asks for a year, but it also automatically displays links for the past 4 years and the future 2 (to save the user the hassle of typing in the year).
calendargenerator.asp
To generate a simple printable calendar with days-of-the-year, click on the year below:
<%
Dim iYearTmp
For iYearTmp = Year(Now()) - 4 to Year(Now()) + 2
Response.Write "” & iYearTmp & ” Calendar” & vbCrLf
Next
%>
Or enter a valid year in the form. If you provide an invalid date, the current year will be used.
the main form gets submitted to the page below. this page does all the work.
displaycalendar.asp
<% Option Explicit
Function IsLeapYear(iYear)
If (iYear mod 4 = 0) AND ((iYear mod 100 <> 0) OR (iYear mod 400 = 0)) then
' It is a Leap Year
IsLeapYear = True
Else
IsLeapYear = False
End if
End Function
Function getDaysInMonth(iYear, iMonth)
Dim strDays
Select Case cint(iMonth)
Case 1,3,5,7,8,10,12:
strDays = 31
Case 4,6,9,11:
strDays = 30
Case 2:
If IsLeapYear(iYear) then
strDays = 29
Else
strDays = 28
End If
End Select
getDaysInMonth = strDays
End Function
Sub CreateMonth(iYear, iMonth)
Dim iDayCtr
Dim iCellCtr
Dim iMaxDays
Dim iJulian
Dim iStartWeekDay
iMaxDays = getDaysInMonth(iYear, iMonth)
iStartWeekDay = Weekday(DateSerial(iYear,iMonth,1))
iJulian = DatePart("Y",DateSerial(iYear,iMonth,1))
iDayCtr = 1
iCellCtr = 1
With Response
.Write "<table class='monthtable' cellpadding=1 cellspacing=0 border=0>" & VbCrLf
.Write "<tr><td colspan=7 align=center><font class='monthname'>" & MonthName(iMonth) & "</font></td></tr>" & VbCrLf
.Write "<tr><td class='tdweekday'>S</td><td class='tdweekday'>M</td><td class='tdweekday'>T</td><td class='tdweekday'>W</td><td class='tdweekday'>TH</td><td class='tdweekday'>F</td><td class='tdweekday'>SA</td></tr>" & VbCrLf
.Write "<tr>" & VbCrLf
' We might not even need empty cells at first
If iStartWeekDay > 1 Then
While iCellCtr < iStartWeekDay
.Write "<td></td>" & VbCrLf
iCellCtr = iCellCtr + 1
Wend
End If
' We should not have counted that last one, so substract
iCellCtr = iCellCtr - 1
While iDayCtr <= iMaxDays
.Write "<td class='tdday'><b>" & iDayCtr & "</b><br><div style='text-align: right'><i>" & iJulian & "</i></div></td>" & VbCrLf
iCellCtr = iCellCtr + 1
iDayCtr = iDayCtr + 1
iJulian = iJulian + 1
If iCellCtr Mod 7 = 0 Then
.Write "</tr><tr>" & VbCrLf
End If
Wend
While iCellCtr Mod 7 <> 0
.Write "<td></td>" & VbCrLf
iCellCtr = iCellCtr + 1
Wend
.Write "</tr>" & VbCrLf
.Write "</table>" & VbCrLf
End With
End Sub
Dim SCRIPT_NAME
SCRIPT_NAME = Request.ServerVariables("SCRIPT_NAME")
' Various stuff used throughout
Dim sUserName
Dim strSQL
Dim iYear
Dim iJulian
sUserName = Trim( Mid( Request.ServerVariables("LOGON_USER"), 12, 32 ) )
iYear = Trim(Request.QueryString("iYear"))
If Not IsNumeric(iYear) Or iYear = "" Then iYear = Year(Now()) End If
'Response.ContentType = "application/vnd.ms-excel"
'Response.AddHeader "content-disposition", "attachment; filename=Calendar" & iYear & ".xls"
%>
<html>
<title><%=iYear%> Calendar</title>
<head>
<style type='text/css'>
.monthtable {
border : 0px;
border-spacing : 0px;
font-family : Arial;
font-size : 8pt;
width: 210px;
border-collapse: collapse;
}
.tdday {
padding: 0px 0px 0px 2px;
border: 1px solid black;
border-spacing: 0px;
font-family: arial;
font-size: 8pt;
width: 70px;
border-collapse: collapse;
}
.tdweekday {
/*padding: 2px 2px 2px 2px;*/
border: 1px solid black;
border-spacing: 0px;
font-family: arial;
font-size: 8pt;
width: 70px;
text-align: center;
border-collapse: collapse;
}
.monthname {
font-family: arial;
font-size : 10pt;
font-weight: bold;
}
</style>
</head>
<body style="margin: 0px 0px 0px 0px">
<%
With Response
.Write "<table border=0 cellpadding=5 cellspacing=0><tr valign=top><td colspan=3 align=center><font face=arial size=+4>" & iYear & "</font></td></tr>"
.Write "<tr valign=top><td>"
CreateMonth iYear, 1
.Write "</td><td>"
CreateMonth iYear, 2
.Write "</td><td>"
CreateMonth iYear, 3
.Write "</td></tr>"
.Write "<tr valign=top><td>"
CreateMonth iYear, 4
.Write "</td><td>"
CreateMonth iYear, 5
.Write "</td><td>"
CreateMonth iYear, 6
.Write "</td></tr>"
.Write "<tr valign=top><td>"
CreateMonth iYear, 7
.Write "</td><td>"
CreateMonth iYear, 8
.Write "</td><td>"
CreateMonth iYear, 9
.Write "</td></tr>"
.Write "<tr valign=top><td>"
CreateMonth iYear, 10
.Write "</td><td>"
CreateMonth iYear, 11
.Write "</td><td>"
CreateMonth iYear, 12
.Write "</td></tr></table>"
End With
%>
Recent Comments