The simplest way to do this is to use the addMinutes($date, Nr) functionality. Note that the number of minutes to add can be a negative number, so starting from your end date, you can 'add' the negative duration to get the start date.
So if you retrieve your source records sorted in reverse order, you can start with the last record, work out its start time, then use this as the end time for the next record and repeat through the loop.