Use blink without delat style programming to monitor the time passing and increment the analogWrite value as needed.
For example, when 8:00 rolls around (with time read from an RTC, or from your own time sketch), start your increments.
0 to 255 in 120 minutes means an increase in PWM about every 30 seconds.
When 8:30 rolls around, then 0 to 255 in 180 minutes means an increase in PWM about every 40-45 seconds.
RTCs will increment every second, so just keep reading the time, when the next period arrives increment the PWM and do the math for the next time reading to watch for.