From the documentation of os.time() parameter:
table specifying a time to convert to seconds. If table is present, it must have fields year, month, and day, and may have additional fields hour, min, sec, and isdst (for a description of these fields, see the os.date function).
So basically you create a table corresponding to the desired date you have in mind, and pass it to os.time(). It will give you the corresponding timestamp.
Then, still from the documentation, form os.date() this time:
time (optional)
Number. If the time argument is present, this is the time to be formatted (see the os.time() function for a description of this value). Otherwise, date formats the current time.
When called without arguments, date returns a reasonable date and time representation that depends on the host system and on the current locale (that is, os.date() is equivalent to os.date("%c") ).
So basically, once you have the timestamp as described above, pass it to os.date() with the formating options of your choice. You can repeat that in a loop for each month.