2010-10-29 5 views
12

J'essaie d'ajouter des secondes à une date en fonction de certains événements qui se produisent. Souvent, si ces événements se produisent en même temps, trop de secondes sont ajoutées. Voici comment je fais actuellement en PHP et MySQLAjout de secondes à datetime dans MySQL

$time_add_on = 15 - $seconds_left; 
DATE_ADD(STR_TO_DATE(end_dt,'%Y-%m-%d %H:%i:%s'), INTERVAL '".$time_add_on."' SECOND 

Ce que cela fait est de prendre les secondes en cours à gauche de la « end_dt » soustraction 15 et l'ajouter à la « end_dt », fondamentalement, vous donner 15 secondes .

Le but ici est fondamentalement ajouter aussi 15 secondes ou réinitialiser la date à l'endroit où il ne reste que 15 secondes. Cela provoque des problèmes, où au lieu de réinitialiser à 15 secondes à gauche, il va ajouter 30 secondes ou 45 secondes.

Quelqu'un connaitrait-il le meilleur moyen de le faire?

Répondre

22
UPDATE table end_dt = DATE_ADD(end_dt, INTERVAL 15 second) 
WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW() 

Je pense que c'est ce que vous voulez, ajoute essentiellement 15 secondes à end_dt quand end_dt est de 15 secondes de maintenant

EDIT NOUVEAU QUERY Cette requête devrait fonctionner:

UPDATE `table` 
    SET end_dt = DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND) 
WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW() 
+0

Hey Logan, cela ne fonctionnerait pas, car s'il reste 10 secondes et que vous en ajoutez 15, il vous restera 25 secondes. – dzm