Comment puis-je arrondir le résultat de heure () code> haut (vers l'avenir) au prochain multiple de 5 minutes? P>
5 Réponses :
Essayez:
$time = round(time() / 300) * 300;
Alors que l'OP a demandé le «le plus proche» du contexte est décrit comme futur.
Cette solution est valable pour le plus proche. Utilisez rond code> pour le plus proche et
CEIL code> pour l'avenir le plus proche. Bien que nous sommes ici,
plancher code> devrait fonctionner pour la fin.
$now = time(); $next_five = ceil($now/300)*300; This will give you the next round five minutes (always greater or equal the current time).I think that this is what you need, based on your description.
OP a demandé "le plus proche" de ce fait, même si une seconde au-dessus d'une note de cinq minutes.
Je sais que pourquoi j'ai ajouté le commentaire. Par la description de son besoin de ce qu'il cherche, c'est le tour suivant 5 minutes, et pas le script le plus proche (il a dit "qui leur dirait quand leur email serait livré" - Futur Tense). Peut-être que je me trompe mais que ce que j'ai compris
Désolé pour la confusion, j'ai effectivement entendu dire à l'avenir et peu de temps après avoir posté cela réalisé que ceil existait, mais merci pour l'entrée!
Essayez cette fonction:
function blockMinutesRound($hour, $minutes = '5', $format = "H:i") { $seconds = strtotime($hour); $rounded = round($seconds / ($minutes * 60)) * ($minutes * 60); return date($format, $rounded); } //call blockMinutesRound('20:11');// return 20:10
pour les personnes utilisant Carbon (telle que les personnes utilisant Laravel), cela peut aider:
public function testGetNearestTimeRoundedUpWithMinimum() { $this->assertEquals('2018-07-07 14:00:00', TT::getNearestTimeRoundedUpWithMinimum(Carbon::parse('2018-07-06 14:12:59'), 60, 23 * 60 + 10)->format(TT::MYSQL_DATETIME_FORMAT)); $this->assertEquals('2018-07-06 14:15:00', TT::getNearestTimeRoundedUpWithMinimum(Carbon::parse('2018-07-06 14:12:59'), 15, 1)->format(TT::MYSQL_DATETIME_FORMAT)); $this->assertEquals('2018-07-06 14:30:00', TT::getNearestTimeRoundedUpWithMinimum(Carbon::parse('2018-07-06 14:12:59'), 30, 10)->format(TT::MYSQL_DATETIME_FORMAT)); $this->assertEquals('2018-07-06 16:00:00', TT::getNearestTimeRoundedUpWithMinimum(Carbon::parse('2018-07-06 14:52:59'), 60, 50)->format(TT::MYSQL_DATETIME_FORMAT)); $this->assertEquals(Carbon::parse('tomorrow 15:00:00'), TT::getNearestTimeRoundedUpWithMinimum(Carbon::parse('16:30'), 60, 60 * 22 + 30)); }
le plus proche dans le futur ou dans le passé?
@hakre: Vous oubliez l'option du plus proche le plus proche, comme des travaux d'arrondi habituels. À 14h06, la 5 minutes la plus proche est dans le passé (14:05) et à 14h08, la 5 minutes la plus proche est à l'avenir (14:10). Dans la question originale (non éditée), il s'agissait clairement du délai de livraison de courrier électronique attendu (qui doit être à l'avenir).
@Jarrodroberson c'est MySQL, c'est juste PHP.