I faced a similar situation a couple of months ago in a project that required to create time-ranges and date ranges and send them as a JSON
document in order to load them inside an ArShaw FullCalendar.
The solution I came with was the following (the project is in spanish but I tried to translate it accordingly):

So, we ask the user to select a time-range (15, 30, 45 and 60 mins), then the user needs to choose a start date (Head Row of the calendar table) and a start time with an end time (vertical left row in the calendar's table). After the user clicking the "Open Time Slots" button, the program will create those time ranges and put them into the calendar as separated events that can be clicked to see their details.
Optionally, the last recurrent form allows the user to repeat the time range up to a new selected date limit.
We actually tested this funcionality in the Latin American market where this application is being used and some things have changed since the first time we launched it.
For example, we added the icons at the left of the date and time inputs because some users didn't know they were inputs.
We added some popovers (blue small text) that informs the user about the funcionality of that input.
We also expend time on tutorials on how to set the time slots in the calendar because it is not a straight forward action, however, after teaching the user how to make use of it, he/she really appreciated the funcionality because the user only needed to create time slots one time for them all.
We also did a research on our target users who we first thought were the doctors, we later discovered that the actual users were the assistants.
Here's a screenshot on how the calendar looks with open events:
