Was hast Du eigentlich gegen time()?
Das Du die Unix-Zeit (aktuell: 1677937915) dann mit
$t = time()
if ( 0 === $t % 300 )
date->format() ist „teuer“, liefert, wie schon gezeigt einen String, der dann wieder „teuer“ als Zahl interpretiert wird...