Pues a mi se me ocurre crear una array con todos los periodos y ordenar el array por la fecha de inicio de cada periodo. Luego solo tenemos que recorrer el array posición a posición y sumar los días de ese periodo y restarle los días que se solapan con el periodo anterior.
|