Welcome to SQA, Moshe. There is more than one way to approach this. One technique is to choose a random sample from a pool of possible dates. Judging from your question, you do not need to worry about dates from the Precambrian era, the Renaissance, or the distance future -- just dates for which your application is likely to be used.
If your tests are sufficiently fast, you can try every date over a range that contains enough variety to cover whatever special cases you care about: leap years, weekends, bank holidays, and so on.
If there are special cases in multiple dimensions (e.g. Thursdays get special treatment, except not alternating months during leap years), you might consider a combinatorial approach. If there are so many dimensions that a combinatorial approach becomes unmanageable, there are ways to address that too.
A white box approach would be to find dates that cover every code path.
On a more practical note, even if you choose to put your test cases in a table, you may want to document the purpose of each test case so that you will remember them later.
By the way, this kind of problem extends beyond date-based testing. Any good tester needs to worry about choosing input values from a large pool of possible values.