We'll create the table as a string: `"...
"`, and then assign it to `innerHTML`. The algorithm: 1. Create the table header with `` and weekday names. 1. Create the date object `d = new Date(year, month-1)`. That's the first day of `month` (taking into account that months in JavaScript start from `0`, not `1`). 2. First few cells till the first day of the month `d.getDay()` may be empty. Let's fill them in with ``. 3. Increase the day in `d`: `d.setDate(d.getDate()+1)`. If `d.getMonth()` is not yet the next month, then add the new cell `` to the calendar. If that's a Sunday, then add a newline "</tr><tr>". 4. If the month has finished, but the table row is not yet full, add empty `` into it, to make it square.