Не нужно, чтобы в тот же день сообщение появлялось 2 раза, например утром и вечером.
Условие
t - lastT > 0.25 * D && getDay(t) - getDay(lastT) >= days
означает, что
- getDay(t) - getDay(lastT) >= days — это должны быть разные дни, в кол-ве days дней, притом согласно определению getDay(t) к одному дню относится промежуток с шести часов утра до шести часов следующего утра.
- t - lastT > 0.25 * D — между такими днями должно пройти по крайней мере шесть часов.
Если days = 1, то...
Если человек посмотрит вечером в 22 часа и увидит диалог, то на следующее утро в 8 часов тоже увидит диалог.
Если человек посмотрит ночью в 1 час и увидит диалог, то на следующее утро в 8 часов тоже увидит диалог.
А если посмотрит утром в 8 часов и увидит диалог, то вечером в 22 часа не увидит диалог.