Display Calendar In Html

lua-users home
wiki

Displays a Calendar in HTML. This is ideal for 'Kepler' (Lua's equivalent of PHP).

This code requires the get_date_parts, get_days_in_month and get_day_of_week functions from DayOfWeekAndDaysInMonthExample.

-- based on original code from sam_lie

function show_calendar(cdate)

  local yy, mm, dd = get_date_parts(cdate)

  local month_days = get_days_in_month(mm, yy)

  local day_week = get_day_of_week(1, mm, yy)



        --- day in which the calendar day start.. 1=Sunday, 2="Monday"

  local day_start = 2



  local days_of_week = {{ "Sun", 1 }, { "Mon", 2 } , { "Tue", 3 }, { "Wed", 4 }, { "Thu", 5 }, { "Fri", 6 }, { "Sat", 7 }}

  local days_of_week_ordered = {}

  

  for k=1, 7 do

    p = k+day_start-1

    if (p>7) then

      p=p-7

    end

    v = {}

    v.dayname = days_of_week[p][1]

    v.daynum = days_of_week[p][2]

    table.insert(days_of_week_ordered, v)

  end



  local out = "<h3>" .. cdate .. "</h3>"

  out = out .. "<table border='1' width='80%' cellspacing='2' cellpadding='5'>"



  out = out .. "<tr>"

  for i,v in ipairs(days_of_week_ordered) do

    out = out .. "<td>" .. v.dayname .. "</td>"



    if (day_week == v.daynum) then

      d = - i + 2

    end

  end

  out = out .. "</tr>"



  while (d < month_days) do

    out = out .. "<tr>"

    for i,v in ipairs(days_of_week) do

      if (d>=1 and d <=month_days) then

        if (d==dd) then

          out = out .. "<td bgcolor='#FFFF99'>" .. d .. "</td>"

        else

          out = out .. "<td>" .. d .. "</td>"

        end

      else

        out = out .. "<td> </td>"

      end



      d = d + 1

    end

    out = out .. "</tr>"

  end



  out = out .. "</table>"



  return out

end

Here is a test:

print(show_calendar('2007-01-01'))  -- test

Alternate version by RichardWarburton that doesn't have the dependencies above:

local print = function(...) SAPI.Response.write (table.concat(arg)) end -- suggestion if using Kepler



function displayMonth(month, year, weekStart)

  local t,wkSt = os.time{year=year, month=month+1, day=0}, weekStart or 1

  local d = os.date("*t", t)

  local mthDays, stDay = d.day,(d.wday-d.day-wkSt+1)%7

  print('<table class="month">\n<caption>', os.date('%B',t), '</caption>\n<tr>')

  for x=0,6 do print(os.date("<th>%a</th>", os.time{year=2006, month=1, day=x+wkSt})) end

  print('</tr>\n<tr>', string.rep('<td></td>', stDay))

  for x=1,mthDays-1 do print("<td>", x, "</td>", (x+stDay)%7==0 and "</tr>\n<tr>" or "") end

  print('<td>', mthDays, '</td>', string.rep('<td></td>', (7-(mthDays+stDay))%7), "</tr>\n</table>\n")

end


RecentChanges · preferences
edit · history
Last edited January 1, 2011 9:00 pm GMT (diff)