2010-11-11 4 views
2

Je dois trouver les prochaines minutes (divisibles par cinq): 00 à partir du résultat d'obtenir l'heure actuelle en UTC, laissez-moi vous expliquer ...Formez un mysql utc_timestamp à cinq prochaines minutes bloc

J'utilise le

SELECT UTC_TIMESTAMP() 

Fonction dans MySQL, qui me renvoie "2010-11-11 16:26:19".

Je veux ensuite convertir cette valeur en "2010-11-11 16:30:00", de préférence en utilisant MySql seulement, ou une combinaison de MySql et PHP.

À la votre!

Répondre

3
MsSQL: 
DATEADD(second, (60 - DATEPART(second, Last_Updated)) + ((5 - (DATEPART(minute, Last_Updated) % 5)) * 60) - 60, Last_Updated) 
MySQL: 
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL ((60 - SECOND(UTC_TIMESTAMP())) + ((5 - (MINUTE(UTC_TIMESTAMP()) % 5)) * 60) - 60) SECOND); 

Remplacer « LAST_UPDATED » avec la valeur que vous convertissez, mais fonderai sur quoi que ce soit 05h00 à l'intervalle de 5 minutes.

2010-10-26 18:04:07.000 2010-10-26 18:05:00.000 
2010-11-10 17:18:59.000 2010-11-10 17:20:00.000 
2010-11-10 20:59:27.000 2010-11-10 21:00:00.000 
2010-11-10 20:59:46.000 2010-11-10 21:00:00.000 
2010-11-11 12:00:51.000 2010-11-11 12:05:00.000 
2010-11-11 12:30:59.000 2010-11-11 12:35:00.000 

Ce sont les résultats que j'ai obtenus en testant une base de données de mon côté.

EDIT Oublié d'inclure la version de MySQL, oups. Aussi gardé la version de MsSQL incase quelqu'un d'autre était curieux en cours de route.

3

Editer: Je ne suis pas un utilisateur MySQL ... Je vais laisser l'essentiel et quelqu'un pourrait en faire plus.

SELECT UTC_TIMESTAMP() + 300 - UNIX_TIMESTAMP() % 300; 

Edit: Je viens Réécriture de la ci-dessus pour travailler dans MySQL:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(UTC_TIMESTAMP()) 
+ 300 - (UNIX_TIMESTAMP(UTC_TIMESTAMP()) % 300)); 

Je ne pense pas que ce soit exactement ce que l'OP veut, car il ronde a également augmenté de 5 minutes lorsque le le temps est exactement divisible par 5 minutes. Par exemple, 14:45:00 serait arrondi à 14:50:00, ce qui est faux. Mais c'est un pas dans la bonne direction.

+0

Uhm, pourquoi l'avez-vous cassé Hammerite? – plundra

2

J'utiliserais UNIX_TIMESTAMP() et FROM_UNIXTIME() en combinaison avec ROUND() pour y accéder.

limite donc 5 minutes le plus proche serait:

select now(),from_unixtime(300 * round(unix_timestamp(now())/300)); 

+---------------------+-------------------------------------------------------+ 
| now()    | from_unixtime(300 * round(unix_timestamp(now())/300)) | 
+---------------------+-------------------------------------------------------+ 
| 2011-04-23 09:20:35 | 2011-04-23 09:20:00         | 
+---------------------+-------------------------------------------------------+ 

Avec le temps unix vous travaillez en quelques secondes. 10 secondes les plus proches vous diviser par 10, rond puis multiplier par 10.

la plus proche minute - utiliser 60 heure la plus proche - utiliser 3600

Vous avez l'idée.

+0

J'ai eu un problème différent, et cela m'a aidé. Merci! –

+0

Ce n'est pas correct, l'OP voulait arrondir à la marque de 5 minutes la plus proche, pas simplement arrondir – superphonic

+0

Ajouter la moitié du montant total à arrondir (150) à unix_timestamp (now()). De cette façon, il sera toujours 'arrondi' – twicejr

Questions connexes