Je veux entourer l'heure actuelle jusqu'au Comment puis-je faire ça? P> 15 code> intervalle minute.
donc s'il est actuellement 6:07 code>, il serait lu
6: 15 code> comme heure de début. P>
4 Réponses :
Vous pouvez diviser le temps en heures et minutes, puis utilisez la fonction CEIL code> comme:
Neat, mais 12:58 deviendra 12:60 et pas 13h00 :-(
Notez que cela ne tourne pas à 15 minutes près. Il avance le temps à la prochaine division de 15 minutes. Mais la question initiale souhaitait 7 à atteindre 15 ans, ce qui n'est pas non plus le plus proche.
L'intervalle de 15 minutes le plus proche à 6:07 est 6:00, pas 6:15. Voulez-vous l'intervalle de 15 minutes le plus proche ou le prochain intervalle de 15 minutes?
En supposant que c'est le plus proche, quelque chose comme ça fait ce que vous voulez. P>
#!/usr/bin/perl use strict; use warnings; use constant FIFTEEN_MINS => (15 * 60); my $now = time; if (my $diff = $now % FIFTEEN_MINS) { if ($diff < FIFTEEN_MINS / 2) { $now -= $diff; } else { $now += FIFTEEN_MINS - $diff; } } print scalar localtime $now, "\n";
Une solution facile consiste à utiliser math :: rond a > de CPAN. use strict;
use warnings;
use 5.010;
use Math::Round qw(nearest);
my $current_quarter = nearest(15*60, time());
say scalar localtime($current_quarter);
Variation mineure de la première réponse à l'aide de Sprintf au lieu de CEIL et POSIX. N'utilise également pas de modules CPAN supplémentaires. Ceci arrondit ou bas alors 6:07 = 6:00, 6:08 = 6:15, 6:22 = 6:15 et 6:23 = 6h30. Notez qu'une heure est ajoutée si les minutes arrondies sont égales 60. Cependant pour le faire correctement, vous devez utiliser une fonction Timelocal et localtime pour ajouter l'heure. c'est-à-dire ajouter une heure peut ajouter une journée, un mois ou une année.
#!/usr/bin/perl my ($hr,$min) = split/:/,$time; my $interimval = ($min/15); my $rounded_min = sprintf "%.0f", $interimval; $rounded_min = $rounded_min * 15; if($rounded_min == 60) { $rounded_min = 0; $hr++; $hr = 0 if($hr == 24); }