Ve la documentación oficial; la función
strtotime() lo que hace convertirte el formato fecha que le pasas a formato TIMESTAMP, esto es un formato en segundos (desde el 1-8-1970, pero t{u preocupate que son segundos).
Entonces al efectuar la resta vaz a tener los segundos de diferencia entre ambas fechas (matemáticas básicas)... pués solo convierte esos segundos a minutos, horas, días... etc. ¿cómo?; diviendiendo (nuevamente matemáticas básicas).
Cada función que no entiendas consultala en la documentación oficial; quizá no sepas la función de
intval(), pero lo que hace el código que tienes (y lo que debes de hacer) esta muy claro:
- Obtiene la diferencia en segundos
- Divide dicha difernecia entre los segundos correspondientes a X periodo (si divides entre 60 tendrás los minutos, saca cuentas).
- Obtiene solo la parte entera de esa división (intval()).
- Le resta los segundos correspondientes de esa porción (por eso multiplica por lo mismo que dividió) a la diferencia original...
- Y tenemos un algoritmo... repite cuantas veces sea necesario por los periodos correspondientes.
En serio... matemáticas básicas. Espero haberme dado a entender. Suerte!