Bonsoir !
Je suis prêt à parier que le timestamp retourné par PHP (via time()) et celui stocké dans votre base MySQL ne sont pas basés sur le même fuseau horaire.
Par ailleurs, le type de données "timestamp" en MySQL ne stocke pas le fuseau horaire, utilisez plutôt le type de données "datetime".
Cet article devrait vous intéresser :
http://dev.mysql.com/doc/refman/5.6/en/datetime.html
Attention aussi avec le format "timestamp", il y a une subtilité (que je trouve particulièrement foireuse, avis perso) : MySQL considère que la première colonne de type "timestamp" dans une table doit automatiquement être mise à jour lorsque l'on fait un UPDATE. Plus de précisions sur
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Pour résoudre votre problème, je pense que vous devriez envisager de modifier ce champ timestamp vers datetime (pour avoir le fuseau horaire), et que vous ne devriez pas utiliser la fonction time() de PHP, mais bien la fonction NOW().
Par ailleurs, il y a une fonction toute dédiée pour vous : TIMEDIFF(), ce qui donne ceci :
mysql> SELECT TIMEDIFF(NOW(), '2013-01-09 17:06:42');
+----------------------------------------+
| TIMEDIFF(NOW(), '2013-01-09 17:06:42') |
+----------------------------------------+
| 02:50:49 |
+----------------------------------------+
1 row in set (0.00 sec)
Mais ce n'est pas encore suffisant, ce qui vous intéresse, c'est le nombre de minutes, au diable les secondes et les heures !
Alors, on va encore faire travailler le SGBD à votre place, et lui confier la tâche !
Et on va se servir de la fonction TIME_TO_SEC() qui va nous donner le nombre de secondes :
mysql> SELECT TIME_TO_SEC(TIMEDIFF(NOW(), '2013-01-09 17:06:42'))/60;
+--------------------------------------------------------+
| TIME_TO_SEC(TIMEDIFF(NOW(), '2013-01-09 17:06:42'))/60 |
+--------------------------------------------------------+
| 174.6500 |
+--------------------------------------------------------+
1 row in set (0.00 sec)
Mais... peut-être que cette décimale va vous enquiquiner alors... tant qu'à faire travailler le SGBD, on va le faire jusqu'au bout, en utilisant FLOOR() qui va arrondir à la minute inférieure (donc 1,3 minute donnera 1) ce qui donne ceci :
mysql> SELECT FLOOR(TIME_TO_SEC(TIMEDIFF(NOW(), '2013-01-09 17:06:42'))/60);
+---------------------------------------------------------------+
| FLOOR(TIME_TO_SEC(TIMEDIFF(NOW(), '2013-01-09 17:06:42'))/60) |
+---------------------------------------------------------------+
| 174 |
+---------------------------------------------------------------+
1 row in set (0.01 sec)
Dernière précision (mais je suppose que vous le saviez déjà), remplacez la chaine '2013-01-09 17:06:42' par le nom de votre colonne !
J'espère que cela solutionnera votre problème, tenez-nous au courant !
Bonne soirée !
Modifié par Bouchon (09 Jan 2013 - 20:08)