This is done using an IntervalMatch load (you can read more about it here: http://community.qlik.com/docs/DOC-4310)
The premise is to match up your dates to your 'intervals' as your date to/date from:
You can then create the table you're after by simply creating a tablebox with Date and Period in. As a warning, it will create a synthetic join in your model, but this is normal and expected.
This seems to do the job pretty well, but I think I've stumbled upon a solution that's better for me inLoops in the Script. If I load the table of periods (in my case this is from an Oracle database) I can then loop through with the following script:
Date( DateFrom + IterNo() - 1 ) as Date
While IterNo() <= DateTo - DateFrom + 1;
Your solution may be better in other situations so I'll hold on to that. Thanks!