Différence entre dates / dates dans un format différent [EDIT du : 6 mars 2008]

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 : Différence entre dates / dates dans un format différent [EDIT du : 6 mars 2008]

par Pierig » 06 mars 2008, 17:40

aie aie aie tout ce temps perdu............. :s
merci c'était effectivement le 2 (j'avais mis ça pour mes tests :s) j'ai complètement oublier de le rechanger ... :roll:

Enfin ça fonctionne maintenant ^^

Je vais regarder la doc promis :oops:

par Ryle » 06 mars 2008, 17:14

1 mois de différence ? euh... ton $diff contient des secondes, que tu divises par 86400 (soit 60*60*24) ce qui te donne donc des jours.. du 13/02 à aujourd'hui ça te fait du 21 jours, ce qui est inférieur à 30, mais bien supérieur à 2 dans le code que tu nous as donné :) :
if($diff > 2) 
                { 
                    $style_ligne='css_ligne_rouge'; 
                    $trentejours="yes"; 
                }
Quant à la fonction date(), effectivement il faut savoir qu'elle te permet de formater la date et l'heure comme bon te semble... voir la doc ;)

par Pierig » 06 mars 2008, 16:36

Exemple de résultat faux :

Date de l'emprunt : 13/02/08

Et aujourd'hui la ligne est mise en rouge alors qu'il n'y a pas 1 mois de différence mais moins ce qui n'est pas normal.

Et ca t'empêche de "standardiser" l'autre date ? Smile Si ton framework t'impose de travailler avec un format de date jj/mm/aa, pourquoi vouloir en utiliser un autre quand tu récupères la date du jour : date("d/m/y")
Je vais me mettre la honte mais je pensait que cette fonction ne foncionnait que avec des " - " :s
Enfin effectivement je vais pouvoir changer ça merci.

par Ryle » 06 mars 2008, 16:30

pour rappel : je n'ai pas standardisé les dates car je ne peut pas sachant que le retour de ma première date est dans un "framework" (que je n'ai pas le droit de toucher).
Et ca t'empêche de "standardiser" l'autre date ? :) Si ton framework t'impose de travailler avec un format de date jj/mm/aa, pourquoi vouloir en utiliser un autre quand tu récupères la date du jour : date("d/m/y")
Bon ca ne va pas résoudre ton problème, c'était juste histoire de dire que tu pouvais rester cohérent avec tes dates ;)

Pour le reste, y faut tester :
Quelles sont les valeurs de tes deux dates ?
Quelles sont les valeurs de tes deux mktime ?
Quelle est la valeur de $diff ?
...

par d0m » 06 mars 2008, 16:26

autant pour moi, je regardais le code d'un de tes précédent message :oops:
Les résultats sont faux
à quel échelle?
plusieurs jours? juste un jour ? tu as un exemple de résultat faux?

par Pierig » 06 mars 2008, 15:57

Je récupère :

debut :06/03/08

fin :06-03-2008

mois Debut :03
jour Debut :06
annee Debut :2008


en faisant :
echo "debut :";
			  echo $debut;
			  ?><br><?php
			  echo "fin :";
			  echo $fin;
			  ?><br><?php
			  echo "mois Debut :";
			  echo $tDeb[1];
			  ?><br><?php
			  echo "jour Debut :";
			  echo $tDeb[0];
			  ?><br><?php
			  echo "annee Debut :";
			  echo $tDeb[2];
pour moi ça à l'air correct ... Là je suis un peu paumer du coups :s
A priori je fait bien : [Date de fin] - [Date de début]

Donc si je reprend ça doit donner :
mktime(0, 0, 0, $tFin[1], $tFin[0],$tFin[2]) - mktime(0, 0, 0, $tDeb[1], $tDeb[0],$tDeb[2])
C'est à dire exactement ce que j'ai :(
Aie aie aie pauvre Beckham... :D

par d0m » 06 mars 2008, 15:40

effectivement l'ordre n'est pas bon.

rappel : mktime( heure , minutes , secondes , mois , jour , année )
$tDeb = explode("/", $debut);
$tFin = explode("-", $fin); 
Pose toi les questions qu'est ce qu'il y a dans:
- $tDeb[0] ?
- $tDeb[1] ?
- $tDeb[2] ?
- $tFin[0] ?
- $tFin[1] ?
- $tFin[2] ?

et ou les placer dans la fonction mktime.

C'est mettre des carré dans les trous carrés et des ronds dans les trous ronds. (pour peu qu'on ne s'appelle pas Beckham)

par Pierig » 06 mars 2008, 15:07

Heu...
Je revient sur le sujet car j'ai un souci en fait ça ne fonctionne pas :s
Les résultats sont faux :(

Je remet la fonction :

function NbJours($debut, $fin) {


			  $tDeb = explode("/", $debut);
			  $tFin = explode("-", $fin);
			
			  $tDeb[2]= "20".$tDeb[2];
			  $diff = mktime(0, 0, 0, $tFin[1], $tFin[0],$tFin[2]) - mktime(0, 0, 0, $tDeb[1], $tDeb[0],$tDeb[2]);
			
			  return(($diff / 86400)+1);
			}


l'endroit ou j'appel ma fonction :
$diff = NbJours($produit->getPret_Date_DEBUT(),date("d-m-Y"));
				if($diff > 2)
				{
					$style_ligne='css_ligne_rouge';
					$trentejours="yes";
				}


L'ordre de tes paramètres n'est pas le bon dans la fonction mktime()

rappel : mktime( heure , minutes , secondes , mois , jour , année )
Je pense que l'ordre de mes paramètres ne doit toujours pas être correct et je ne trouve pas le bon :s

pour rappel : je n'ai pas standardisé les dates car je ne peut pas sachant que le retour de ma première date est dans un "framework" (que je n'ai pas le droit de toucher).

En espérant que vous saurez m'aider.

merci ^^

par Pierig » 15 févr. 2008, 10:23

Youpi ça fonctionne :)
C'était bien l'ordre de mes paramètres qui n'était pas bon ^^
Je n'y avais pas penser vu que la fonction je l'ai récupérée sur le net je pensait qu'elle était bonne.
Comme quoi .... on ne peut faire confiance que a PHPFRANCE xD

merci ;)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par d0m » 15 févr. 2008, 09:36

L'ordre de tes paramètres n'est pas le bon dans la fonction mktime()

rappel : mktime( heure , minutes , secondes , mois , jour , année )

par iclo » 14 févr. 2008, 18:11

D'où proviennent ces dates ? il serait plus simple si c'est possible de standardiser leur format...

par Pierig » 14 févr. 2008, 17:43

Merci pour ta réponse, effectivement il y avait bien un problème là.
J'en ai aussi trouver un autre (les années même après le explode était dans un format différent (07 ou 2007))

voici donc la fonction une fois modifié :
<?php
		
			function NbJours($debut, $fin) {

			  $tDeb = explode("/", $debut);
			  $tFin = explode("-", $fin);
			
			  $tDeb[2]= "20".$tDeb[2];
			  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
			  mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);

			  return(($diff / 86400)+1);
			}
		?>
le résultat donne : -4684
Je fait la différence entre cette date : 26/12/07 et la date du jour retournée par la fonction : date("d-m-Y")

Verrais tu le souci par hasard ? :)

par d0m » 14 févr. 2008, 17:21

Tes 2 dates on un format différents, il faut donc les exploser différemment :
la première selon le caractère -
la deuxième selon le caractère /

Différence entre dates / dates dans un format différent [EDI

par Pierig » 14 févr. 2008, 17:15

Bonjour,

J'aimerai faire la différence entre deux dates, j'ai lu plusieurs choses qui permettent de le faire mais je n'y arrive pas.

Lorsque j'affiche ma première date j'obtient : 14-02-2008
La deuxième : 26/12/07

J'ai essayer d'utiliser cette fonction :
function NbJours($debut, $fin) {

			  $tDeb = explode("-", $debut);
			  $tFin = explode("-", $fin);

			  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
			  mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
			  
			  return(($diff / 86400)+1);
			}
Je n'arrive pas à trouver comment la modifier pour qu'elle soit opérationnelle pour moi.
J'ai besoin de vos avis éclairés ^^

merci