comment soustraire 2 dates

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 : comment soustraire 2 dates

par Truc » 16 janv. 2007, 22:49

que est ce qui ne marche pas au juste ?

Tu fait un mysql_fetch_*
Un test if sur le fetch_* précédent
Puis un nouveau fetch_*, si tu n'as qu'un tuple dans la base de données alors tu ne passeras pas ce test du while et tu sors sans passer par la case départ et sans rien afficher.

par abricot » 16 janv. 2007, 15:03

Bonjour,

Je crois que ni le premier, ni le deuxième fonctionnent.

Une fonction PHP qui reçoit plusieurs paramètres, comme c'est le cas de mysql_connect(),
elle les attend séparés par des virgules. C'est pas le cas
mysql_connect("localhost" "nanana" " "); 
Coucou, excuse moi faute de frappe, j'ai fais le script à la volée, je vais rectifier ca de suite.

par Ajoloca » 16 janv. 2007, 14:59

Bonjour,

Je crois que ni le premier, ni le deuxième fonctionnent.

Une fonction PHP qui reçoit plusieurs paramètres, comme c'est le cas de mysql_connect(),
elle les attend séparés par des virgules. C'est pas le cas
mysql_connect("localhost" "nanana" " "); 

par abricot » 16 janv. 2007, 14:35

Merci truc, désolé pour le retard!
Je suis en train de creer un petit programme inutile, je déposerais les sources une fois terminé pour que vous me dites si j'aurais pu faire mieux!
J'adore programmer mais des fois c'est franchement bisare je m'explique :
<?php
// sqldate.php
mysql_connect("localhost", "nanana", " ");
mysql_select_db("nana_db");
$query = mysql_query("SELECT DATE_FORMAT(date, '%m,%d,%Y') as date FROM nana");
$array = mysql_fetch_array($query);
?>
<?php
// date.php
require ("sqldate.php");

if (!empty($array['date'])){
          while($array = mysql_fetch_array($query)){
          $date1 = $array['date'];
          list($mois,$jour,$annee) = explode(',', $date1);
          $date2 = time();
          $date3 = date(d m Y);

          $mktime = mktime(0,0,0,$mois,$jour,$annee);
          $mkresult = $date2 - $mktime;
          $mkresult = floor($mkresult / 3600);
      
          echo 'Il y a '.$mkresult.' heures entre le '.$jour.' '.$mois.' '.$annee.' et (aujourd\'hui) le '.$date3.'';
          }
     }
else {
die();
}
?>
Quelqu'un pourrait m'expliquer pourquoi ca ne marche pas si je met mon while derrière un IF, et pourquoi ca ne marche pas non plus si $array existe déjà avant de commencer la boucle?
Pour que ca marche je dois faire comme ca:
// sqldate.php
<?php
mysql_connect("localhost", "nanana", " ");
mysql_select_db("nana_db");
$query = mysql_query("SELECT DATE_FORMAT(date, '%m,%d,%Y') as date FROM nana");
?>
<?php
// date.php
require ("sqldate.php");
         
while($array = mysql_fetch_array($query)){
     $date1 = $array['date'];
     list($mois,$jour,$annee) = explode(',', $date1);
     $date2 = time();
     $date3 = date(d m Y);

     $mktime = mktime(0,0,0,$mois,$jour,$annee);
     $mkresult = $date2 - $mktime;
     $mkresult = floor($mkresult / 3600);
      
     echo 'Il y a '.$mkresult.' heures entre le '.$jour.' '.$mois.' '.$annee.' et (aujourd\'hui) le '.$date3.'';
}

else {
die();
}
?>

par Truc » 14 janv. 2007, 15:54

Il est universel le format
YYYY-MM-DD (aaaa-mm-jj)

C'est juste que mktime() demande un ordre de passage des pramètres différent (sans conséquences).

par abricot » 14 janv. 2007, 15:51

mmmh d'accord mais pourquoi ils n'ont pas fait un format de date universel au lieu de nous embrouiller le cerveau!!! :evil:

par Truc » 14 janv. 2007, 15:39

DATEDIFF est une fonction SQL tu ne peut donc pas trouver plus optimisé :wink:

par abricot » 14 janv. 2007, 14:54

recoucou,

Je trouve que c'est vraiment pas optimisé cette histoire! Je m'explique.

Si je fais un mktime() je dois presenter ma date sous cette forme : mois, jour, année.

Si je prend la date de ma table sql elle se présente comme ceci : année, mois, jour.

Donc je dois encore faire une conversion avec datediff si je veux la traiter avec mktime()? Je trouve que c'est du n'importe quoi!!!

par Truc » 14 janv. 2007, 00:59

Le tableau n'est la que pour bien montrer où placer les paramètres (repérable aux indices).

Sinon pour avoir le timestamp "$time" tu peux passer par strtotime() en passant en argument la date comparer.

Autre solution DATEDIFF, extraire la différence entre deux dates depuis la requête (si la date provient d'une BD).

par abricot » 13 janv. 2007, 23:33

oups desolé je n'ai pas fais gaffe, merci infiniment! donc le code est :
<?php 
$date = Array('annee'=>1982, 'mois'=>05, 'jour'=>01); // la date de départ 
$aujourdhui = time(); // le timestamp d'aujourd'hui 

$time = mktime(0, 0, 0, $date['mois'], $date['jour'], $date['annee']); // la date de départ est passée en secondes 
$ecart = $aujourdhui - $time; // soustraction => nombre de secondes de la différence 
$ecart = floor($ecart / 3600 / 24); // on repasse en nombre de jours 
echo $ecart.' jours<br />'; 
$ecart = floor($ecart / 365); // on repasse en années 
echo $ecart.' années'; 
?>  
Mais je ne comprend vraiment pas pourquoi on utilise un tableau dans cet exemple! Ca serais plus simple de faire $time = mktime(0,0,0,12,24,2007); non ?

par Truc » 13 janv. 2007, 22:58

Mais tu as vu que j'ai donné un lien direct ?! 8-|

par abricot » 13 janv. 2007, 22:54

Bin non sur google :roll:

Re: comment soustraire 2 dates

par Truc » 13 janv. 2007, 22:51

Salut,
Salut tout le monde :shock:
ça te choque à ce point d'être poli et saluer :lol:
J'ai cherché un peu partout sur le net
Dans la FAQ du forum aussi ?

comment soustraire 2 dates

par abricot » 13 janv. 2007, 22:42

Salut tout le monde :shock:

J'ai cherché un peu partout sur le net et tous les exemples que j'ai trouvé sont très mal expliqués.
Je voudrais savoir comment soustraire 2 dates pour trouver le nombre de jours qui les sépares, en gros je voudrais faire ca :

$date1 = date("20 10 2000");
$date2 = date("d m Y");

et soustraire les deux pour avoir le nombre de jours qui les séparent.

J'ai vu que beaucoups utilise un timestamp je trouve ca completement idiot de soustraire des millions de secondes pour avoir un resultat et en plus j'ai rien compris :/