OVH Cloud OVH Cloud

sourtraction de dates

3 réponses
Avatar
Romain
Bonjour,

j'essaye de calculer une difference entre la date actuelle et une date
stockée dans une base sql.

la date de la base est de la forme (varchar 32):
$date_base="30-11-03";

$date_jour= date("d-m-y");

Or si je fais:
$diff= $date_jour - $date_base;

j'obtiens
> 4
ou lieu de 35. Pourquoi?

Merci

3 réponses

Avatar
Roland Matteoli
le Dimanche 26 Octobre 2003 20:31, Romain écrivait :

j'essaye de calculer une difference entre la date actuelle et une
date stockée dans une base sql.
la date de la base est de la forme (varchar 32):
$date_base="30-11-03";
$date_jour= date("d-m-y");
Or si je fais:
$diff= $date_jour - $date_base;
j'obtiens 4 ou lieu de 35. Pourquoi?


Parce que tu soustrais 2 chaines de caractères, et non pas 2 dates.

Pour faire une différence de dates, il faut convertir les dates
en secondes avec la fonction mktime (voir manuel).

$date_base=mktime(0,0,0,30,11,2003);
$date_jour=mktime(0,0,0,date(d),date(m),date(Y));
$diff=$date_jour - $date_base;
// La différence obtenue est en secondes, il faut la convertir:
$diff_en_jours=$diff/(24*60*60);
// normalement ça doit tomber juste !

--
Roland Mattéoli

Avatar
Thibaut Allender
Romain wrote:

Or si je fais:
$diff= $date_jour - $date_base;
j'obtiens
4


ou lieu de 35. Pourquoi?


parce qu'on ne peut pas faire un soustraction sur une date de cette facon !

comment php pourrait-il deviner que tu utilises des dates...?

ca, c'est un manque de logique de ta part
ensuite, il y a manque de methodologie, celle ci consistant d'abord a
consulter la doc

si on le fait, et qu'on arrive sur
http://fr.php.net/manual/fr/function.date.php

on vois un magnifique exemple de ce que tu cherches a faire...

a+

--
freelance + web design + php dev + digital photo
+ http://www.capsule.org


Avatar
Stephane
"Romain" a écrit

Bonjour,

j'essaye de calculer une difference entre la date actuelle et une date
stockée dans une base sql.

la date de la base est de la forme (varchar 32):
$date_base="30-11-03";

$date_jour= date("d-m-y");

Or si je fais:
$diff= $date_jour - $date_base;

j'obtiens
4
ou lieu de 35. Pourquoi?


Merci


Salut,

A mon avis, c'est une très mauvaise idée à la base de stocker des dates dans un champ de type varchar : on arrive très
vite à des blocages de ce genre. La priorité est de passer ce champ en type date, ce qui te permettra par la suite
d'utiliser toutes les fonctions date (très pratiques) dans les SELECT de MySQL (je suppose que tu utilises MySQL)

Le mieux est de procéder de la manière suivante:

1. ajouter une nouvelle colonne de type "date"
alter table test_date add column new_date date;

2. mettre à jour cette colonne à l'aide l'ancienne colonne :
update test_date set new_date=concat(substring(old_date,7,2),'-',substring(old_date,4,2),'-',substring(old_date,1,2));

3. droper l'ancienne colonne
alter table test_date drop column old_date;

4. renommer la nouvelle colonne
alter table test_date change new_date old_date date.

--
Stéphane
La souplesse d'esprit permet de s'adapter dans toutes circonstances.

http://www.velo-passion.com pour les fans de vélo
http://www.lorimier.com/chemin-des-cretes-du-jura une ballade à pied d'une semaine à 2
http://www.lapassade.ch pour les fans de théâtre