Hi Dave,
You'd need a 'calendar look-up table', that has all days.
You can then Join from the look-up table to the table being used on the report using a Left Join.
On the report, replace date fields from the original table with the datetime field from the look-up table. Even formulas should refer to the datetime fields from the look-up table.
You can then insert a Group on the datetime field from the look-up table and set it to 'Print for Each Month' and a chart that uses the same field (that is set to print for each hour) placed on the Group Header.
-Abhilash