le operazioni, se non è necessario altrimenti, vanno fatte su uno unix timestamp altrimenti diventa MOLTO più complicato gestire correttamente tutte le situazioni
per avere un arrotondamento al 15° minuto conviene fare qualcosa del genere
codice:
$minutes = (int)(time() / 60);
$needToRound = ($minutes % 15) > 0 ? 15 - ($minutes % 15) : 0;
$timestampRounded = ($minutes + $needToRound) * 60;
echo date('d/m/Y H:i:s', $timestampRounded);
Questo codice non tiene conto dei secondi (come fa attualmente il tuo) nel senso che se sono le 14:30:05 verrà sempre arrotondato alle 14:30:00
Altrimenti, per tenere conto anche dei secondi
codice:
$timestamp = time();
$needToRound = ($timestamp % (15*60)) > 0 ? (15*60) - ($timestamp % (15*60)) : 0;
$timestampRounded = $timestamp + $needToRound;
echo date('d/m/Y H:i:s', $timestampRounded);
Ho fatto qualche test è sembra comportarsi correttamente