What this generator does
Give it a first date and a rhythm — every 2 weeks, every month, every 90 days — and it writes out the whole series for you. Most calendar apps can create a repeating event but will not show you the resulting dates as a list you can copy, check or paste into a spreadsheet. That list is the point of this page: twelve fortnightly invoice dates, twenty-six biweekly pay dates, every quarterly review for the next three years.
You can stop the series two ways. Either say how many dates you need, or fill in an end date and get every occurrence up to it. Both are capped at 500 dates per run, which is about twenty years of fortnightly events.
How each interval behaves
Days and weeks are exact arithmetic: every 14 days always lands on the same weekday, so a fortnightly series that starts on a Tuesday stays on Tuesdays forever. This is what payroll systems mean by "biweekly", and it is why a biweekly schedule produces 26 or occasionally 27 pay dates in a year rather than 24.
Months and years keep the day of the month instead, which is what people mean by "the 15th of every month". The awkward case is a start date near the end of a month: the 31st does not exist in every month. The generator clamps to the last day of the shorter month, so a series starting 31 January runs 31 Jan, 28 Feb, 31 Mar, 30 Apr. It does not drift — the following March is still the 31st, not the 28th — because each occurrence is measured from the original date rather than from the previous one.
A yearly series behaves the same way, which matters only for 29 February: in non-leap years it becomes 28 February, and in the next leap year it returns to the 29th.
Weekends and holidays
A repeating date that falls on a Saturday is a real problem for anything involving money or people, and different organisations solve it differently. All four conventions are available:
- Leave it keeps the mathematical interval. Right for anything that does not care what day it is — a subscription renewal, a metric snapshot, a backup.
- Move to the next working day pushes Saturday's occurrence to Monday. This is the common rule for meetings and deliveries.
- Move to the previous working day pulls it back to Friday. This is the standard payroll rule in most countries: staff are paid before the weekend or holiday, not after it.
- Skip it drops the occurrence entirely, which suits things that simply do not happen on a day off, like a daily stand-up.
The moved dates are listed separately under the result so you can see exactly which ones shifted and why. When two occurrences get pushed onto the same working day — a daily series over a weekend, for example — only one is kept rather than repeating the same date three times.
Which days count as the weekend is up to you, and the public holiday calendars for the United States, United Kingdom, Canada, Australia and Germany are built in, with observed and substitute days handled. Company shutdowns and regional holidays go in the custom box.
What people generate
Pay dates and invoice runs. A biweekly payroll calendar for the year, with each date pulled back to the preceding working day, is the single most common use. Monthly invoicing on the 1st has the same problem in a milder form.
Recurring meetings and reviews. Every second Thursday for the next six months, quarterly business reviews, monthly one-to-ones — useful when you need the dates in a document rather than only in a calendar.
Maintenance and inspection schedules. Filter changes every 90 days, quarterly fire-alarm tests, annual certificate renewals. The "move to next working day" rule matters here because nobody is on site at the weekend.
Content and campaign calendars. A post every 10 days, a newsletter every second Tuesday, a release train every three weeks.
Personal schedules. Medication courses, training plans, repayment dates, visa or passport renewal reminders.
Doing it in a spreadsheet instead
For a fixed number of days, the fill handle is enough: type the first date, type the second, select both and drag. For months, =EDATE(start, n) is the correct function because it clamps the day the same way this page does — adding 30 days is not the same as adding a month. In Microsoft 365, =start + SEQUENCE(12, 1, 0) * 14 spills a whole fortnightly series in one formula.
What a spreadsheet will not do without extra work is the weekend rule. Shifting each date to the preceding working day needs WORKDAY wrapped around every cell plus a holiday range you maintain yourself, and the "skip it" behaviour needs a filter step. That is the part this page is for.
Frequently asked questions
What does "every 2 weeks" do with the start date?
The start date is the first occurrence, then each following date is exactly 14 days later, so the whole series keeps the same weekday.
How is the 31st of the month handled?
It clamps to the last day of any shorter month — 31 January, 28 February, 31 March — and returns to the 31st afterwards, because every date is measured from the original start date rather than from the previous one.
Can dates be moved off weekends and holidays?
Yes. Choose whether an occurrence that lands on a non-working day stays put, moves to the next working day, moves back to the previous one, or is skipped. Moved dates are listed under the result.
Is this the same as a biweekly payroll calendar?
Yes — set the interval to 2 weeks, choose "move to the previous working day", and enter 26 dates for a full year.
How many dates can it generate?
Up to 500 per run, within the years 1900 to 2100.