2010-08-16 5 views
1

J'ai essayé en vain d'arrondir l'heure actuelle à l'heure la plus basse en PHP.Arrondir UNIX pour réduire l'heure en PHP

Voici ce que je veux faire: 1. Prenez le temps actuel: $time_now = time(); 2. Ronde vers le bas à la plus proche heure: $time_now = $time_now - ($time_now % 3600); 3. Imprimez à l'aide de la fonction date: print date('d m Y H:i', $time_test);

Mais ce qui semble se passer, c'est que le temps imprimé est ce que je veux + 30 minutes. par exemple: Si l'heure actuelle est 19:03, je reçois une sortie de 18:30 au lieu de 19:00 et si l'heure est 19:34, je reçois une sortie de 19:30 au lieu de 19:00

Cela me rend fou! X ( Ce qui semble se tromper dans ce code ?! Quelque chose à voir avec le fuseau horaire peut-être mon temps de système est GMT +5:. 30

+0

vous echo $ time_test mais avant dans le code, il est $ TIME_NOW? – darma

+1

sa couture pour être le fuseau horaire. testé sur mon environnement local (GMT +2: 00) et ses retours à plein temps – teemitzitrone

+0

Que retourne 'date_default_timezone_get()'? – wimvds

Répondre

4

Il suffit d'utiliser date sans imprimer les minutes, comme:

print date('d m Y H') . ':00'; 
1

La fonction que vous cherchez est floor Les œuvres suivantes comme vous le feriez comme je pense:

$time_now = floor(time()/3600) * 3600; 
print date('d-m-Y H:i', $time_now); 
+2

Cela ne prendrait pas en compte les secondes bissextiles ... – ircmaxell

+0

Pas de chance, regardez l'exemple ci-dessous: 16-08-2010 19:19 devient 16-08-2010 18:30 – Paganwinter

2

ne peux pas vous venez:.

$now = time(); 
echo date('d m Y H', $now) . ':00'; 

// or just 

echo date('d m Y H') . ':00'; 

Il vous imprimer heure actuelle et à quelques minutes de faux

Si vous souhaitez utiliser cet horodatage, vous pouvez le convertir avec la fonction strtotime.

$date = date('d m Y H') . ':00'; 
$timestamp = strtotime($date); 
+0

J'avais d'abord fait cela, et ça marche. Mais cela ressemblait à un hack: P Voulait le faire de façon 'correcte' ... – Paganwinter

+0

C'est une bonne façon :) –

+1

Pourquoi ne pas utiliser 'date ('d m Y H: 00');'? C'est la même chose, mais un peu plus propre ... – ircmaxell

0
$d = strtotime($date); 
$rounded = intval($d/3600) * 3600; 
$formatted_rounded = date('Y-m-d H:i:s', $rounded)