Date addition

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Date addition

par ouckileou » 13 juil. 2005, 08:59

déjà tu peux récupérer la date du jour directement en SQL, plutôt que de le faire en PHP, ce sera plus rapide

avec la fonction NOW() par exemple, qui te renvoit le datetime courant

donc tu peux faire

Code : Tout sélectionner

SELECT UNIX_TIMESTAMP(now()) AS timestamp_courant, UNIX_TIMESTAMP(datex) AS timestamp_datex, UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(datex) AS difference FROM contrat WHERE id_co = 1
tu auras une différence en secondes entre tes deux dates

par :) » 12 juil. 2005, 20:48

tu veux dire : comment avoir la date actuelle
car avoir le timestamp tu sais déjà faire ;)

il te vient toujours pas à l'idée d'aller voir la page des fonctions de dates pour essayer de trouver la fonction qui convient par toi-même ???
je te redonne le lien une quatrième fois : http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

je sais ça fait beaucoup de texte d'un coup, mais ces fonctions sont simples pour la plupart
et avec une petit Ctrl+F sur la page avec "courante", tu trouves vite une fonction qui renvoie la date courante

et il y en a plusieurs...

tu gagneras du temps en cherchant toi-même et en ne postant que si tu galères vraiment ;)
ok alors la j'ai tout les 2 timestemple date actuelle et celle de ma base, comment on les comparre (mois ou jours)
$date=date("Y-m-d");
$req=mysql_query("SELECT UNIX_TIMESTAMP(datex) as date_fin from contrat where id_co=1");
$resu=mysql_fetch_array($req) or die (mysql_error());

$fintimes=$resu['date_fin']-mktime(0 , 0 , 0 , date("m") , date("d") , date("Y"));
echo $fintimes;
J'ai pas trouvé :(

par ouckileou » 12 juil. 2005, 20:26

tu veux dire : comment avoir la date actuelle
car avoir le timestamp tu sais déjà faire ;)

il te vient toujours pas à l'idée d'aller voir la page des fonctions de dates pour essayer de trouver la fonction qui convient par toi-même ???
je te redonne le lien une quatrième fois : http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

je sais ça fait beaucoup de texte d'un coup, mais ces fonctions sont simples pour la plupart
et avec une petit Ctrl+F sur la page avec "courante", tu trouves vite une fonction qui renvoie la date courante

et il y en a plusieurs...

tu gagneras du temps en cherchant toi-même et en ne postant que si tu galères vraiment ;)

par Invité » 12 juil. 2005, 20:13

je te conseille de créer ta requête d'abord dans phpMyAdmin ou autre, sans t'embarrasser du PHP

car là, c'est une erreur de PHP que tu fais, ce qui t'empêche de tester ta requête
$req="SELECT UNIX_TIMESTAMP(datex) from contrat where id_co=1";
mysql_query($req) or die (mysql_error());

echo $req['datex'];
tu affiches
$req['datex']
or où sélectionnes-tu "datex" ?
réponse : nulle part, puisque tu sélectionnes UNIX_TIMESTAMP(datex)

donc, réalise cette requête d'abord dans une interface de ta base de données, ce sera plus confortable

sinon pour info : quand tu sélectionnes des données en utilisant une (ou plusieurs !) fonctions (comme celle-ci, ou COUNT(), ou SUM() ...etc) et que tu veux utiliser un tableau associatif pour les résultats
tu peux renommer le champ de sortie, avec AS
comme ceci :

Code : Tout sélectionner

SELECT SUM(prix) AS prix_total
tu pourras ensuite récupérer avec mysql_fetch_array() cette variable :
$resultat["prix_total"];
ce qui est plus confortable et plus explicite que :
$resultat["SUM(prix)"];
Oki bon j'ai saisi l'idée et apres verif de la requette :
$req=mysql_query("SELECT UNIX_TIMESTAMP(datex) as date_fin from contrat where id_co=1");
$resu=mysql_fetch_array($req) or die (mysql_error());

echo $resu['date_fin'];
ce qui me donne un résultat "1136070000 "

donc apres il faut faire la diff entre celle ci et la date actuelle comment avoir le timestemp de la date actuel ?

Merci bcp+

par ouckileou » 12 juil. 2005, 19:58

je te conseille de créer ta requête d'abord dans phpMyAdmin ou autre, sans t'embarrasser du PHP

car là, c'est une erreur de PHP que tu fais, ce qui t'empêche de tester ta requête
$req="SELECT UNIX_TIMESTAMP(datex) from contrat where id_co=1";
mysql_query($req) or die (mysql_error());

echo $req['datex'];
tu affiches
$req['datex']
or où sélectionnes-tu "datex" ?
réponse : nulle part, puisque tu sélectionnes UNIX_TIMESTAMP(datex)

donc, réalise cette requête d'abord dans une interface de ta base de données, ce sera plus confortable

sinon pour info : quand tu sélectionnes des données en utilisant une (ou plusieurs !) fonctions (comme celle-ci, ou COUNT(), ou SUM() ...etc) et que tu veux utiliser un tableau associatif pour les résultats
tu peux renommer le champ de sortie, avec AS
comme ceci :

Code : Tout sélectionner

SELECT SUM(prix) AS prix_total
tu pourras ensuite récupérer avec mysql_fetch_array() cette variable :
$resultat["prix_total"];
ce qui est plus confortable et plus explicite que :
$resultat["SUM(prix)"];

par :-0) » 12 juil. 2005, 19:47

non, tu n'es pas obligé de modifier ton champ

mais dans ta requête tu peux utiliser cette fonction UNIX_TIMESTAMP()
qui va transformer ta date en timestamp, faire ta soustraction et obtenir le résultat
Voici donc ma requette
$req="SELECT UNIX_TIMESTAMP(datex) from contrat where id_co=1";
mysql_query($req) or die (mysql_error());

echo $req['datex'];
Il me marque "S"

merci

par ouckileou » 12 juil. 2005, 19:32

non, tu n'es pas obligé de modifier ton champ

mais dans ta requête tu peux utiliser cette fonction UNIX_TIMESTAMP()
qui va transformer ta date en timestamp, faire ta soustraction et obtenir le résultat

par :( » 12 juil. 2005, 19:23

on t'a donné deux liens au début de ce thread, qui conduisent vers la même doc MySQL, au chapitre des fonctions de dates et d'heures

ça aurait été bien d'aller jeter un petit coup d'oeil par toi-même
si on peut ajouter deux dates, tu aurais pu te dire "tiens on doit pouvoir faire une différence alors"

bref : regarde la fonction DATEDIFF()
je te rappelle le lien : http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

elle ne marchera peut-être pas avec ta version de MySQL
si c'est le cas, une piste peut être de transformer les dates en timestamp, de faire une soustraction puis de reconvertir au format que tu souhaites
Ma version de mysql est 4.0.2

:((

je modifi donc mon forma date en timestamp ?

par ouckileou » 12 juil. 2005, 19:12

on t'a donné deux liens au début de ce thread, qui conduisent vers la même doc MySQL, au chapitre des fonctions de dates et d'heures

ça aurait été bien d'aller jeter un petit coup d'oeil par toi-même
si on peut ajouter deux dates, tu aurais pu te dire "tiens on doit pouvoir faire une différence alors"

bref : regarde la fonction DATEDIFF()
je te rappelle le lien : http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

elle ne marchera peut-être pas avec ta version de MySQL
si c'est le cas, une piste peut être de transformer les dates en timestamp, de faire une soustraction puis de reconvertir au format que tu souhaites

par :) » 12 juil. 2005, 19:00

ok donc tu as ça :
$requt="insert into user (pseudo, email, date) values ('$pseudo,'$email',ADDDATE($date,INTERVAL 1 MONTH))"; 
déjà, tu peux séparer les variables du reste de la chaine, c'est plus lisible
et essaye de mettres des quotes autour de $date
$requt="insert into user (pseudo, email, date) values ('".$pseudo.",'".$email."',ADDDATE('".$date."',INTERVAL 1 MONTH))"; 
es-tu sûr de bien récupérer tes variables
fais un echo de $requt et poste ici ce que ça donne
Merci ça marche, mais j'ai encore une ptit question avec les dates

comment comparer 2 dates, enfin combien de temps il reste en jours ou en mois d'une date d'une base ici (date) et la date actuelle (dateac)

ex-
$dateac=date("Y-m-d");
apres on fait
fini=$dateac-$date;
echo $fini;
je vois pas trop comment faire mercia vous

par ouckileou » 11 juil. 2005, 13:42

ok donc tu as ça :
$requt="insert into user (pseudo, email, date) values ('$pseudo,'$email',ADDDATE($date,INTERVAL 1 MONTH))"; 
déjà, tu peux séparer les variables du reste de la chaine, c'est plus lisible
et essaye de mettres des quotes autour de $date
$requt="insert into user (pseudo, email, date) values ('".$pseudo.",'".$email."',ADDDATE('".$date."',INTERVAL 1 MONTH))"; 
es-tu sûr de bien récupérer tes variables
fais un echo de $requt et poste ici ce que ça donne

par Invité » 11 juil. 2005, 12:46

pourquoi ne corriges-tu pas déjà les deux erreurs que je t'ai signalé ? le point-virgule et la parenthèse manquante...

ce sera déjà ça de fait, et on verra ton problème de date ensuite s'il persiste ;)
J'ai refait ma requette avant de poster, et le message qui es au dessus et ce qui apparait apres la correction

:)

par ouckileou » 11 juil. 2005, 12:22

pourquoi ne corriges-tu pas déjà les deux erreurs que je t'ai signalé ? le point-virgule et la parenthèse manquante...

ce sera déjà ça de fait, et on verra ton problème de date ensuite s'il persiste ;)

par Invité » 11 juil. 2005, 12:17

si tu les affiches pas c'est sûr que y'aura pas d'erreur

réessaye avec ça :
$requt="insert into user (pseudo, email, date) values (,'$pseudo,'$email',ADDDATE($date,INTERVAL 1 MONTH)";
mysql_query($requt) or die (mysql_error());
tu devrais en avoir une ;)

parceque le point-virgule avant '$pseudo', il doit pas trop aimer :lol:

de plus, compte tes parenthèses, si tu tombes sur un nombre impair y'a un problème ;)
Voici le message d'erreur:

Column 'date' cannot be null

par ouckileou » 11 juil. 2005, 11:27

si tu les affiches pas c'est sûr que y'aura pas d'erreur

réessaye avec ça :
$requt="insert into user (pseudo, email, date) values (,'$pseudo,'$email',ADDDATE($date,INTERVAL 1 MONTH)";
mysql_query($requt) or die (mysql_error());
tu devrais en avoir une ;)

parceque le point-virgule avant '$pseudo', il doit pas trop aimer :lol:

de plus, compte tes parenthèses, si tu tombes sur un nombre impair y'a un problème ;)