Page 1 sur 1

Comparer deux dates

Posté : 22 déc. 2011, 23:45
par Titiii
Bonjour,
J'aimerais comparer deux dates, mais je ne sais pas trop comment m'y prendre.

J'ai fait un if($date1 > $date2) mais ça ne marche pas

Alors en gros : (j'ai simplifier, car je pense que c'est le format de la date qui va pas)
$date1 = d/%m/%Y %Hh%imin
$date2 = getdate()

Comment faut-il faire ?
Merci d'avance.

Re: Comparer deux dates

Posté : 23 déc. 2011, 09:07
par Mazarini
Cela dépend du stockage en mémoire de ta date. Un format timestamp permet des comparaison. Par contre un format string implique de mettre l'année en premier car c'est une comparaison de chaine de caractère.

Re: Comparer deux dates

Posté : 23 déc. 2011, 10:27
par sirakawa
http://fr2.php.net/manual/fr/class.datetime.php
contient des informations passionnantes sur les dates, les heures et autres....

Re: Comparer deux dates

Posté : 23 déc. 2011, 11:03
par Titiii
La première est un DATETIME.

Mais je ne vois pas comment faire (je suppose que tu devais me parler de diff ?)

Re: Comparer deux dates

Posté : 25 déc. 2011, 21:09
par sirakawa
quelque chose comme ça:
<?
$date_1 = date_create('1643-01-01', timezone_open('Europe/Paris'));
$date_2 = date_create('1715-01-01', timezone_open('Europe/Paris'));

echo date_format($date_1, 'd-m-Y') . " pour le début<br />";
echo date_format($date_2, 'd-m-Y') . " pour la fin";
echo ("<hr />");

/* le dernier param true : différence absolue ou false ???*/
$intervalle = date_diff($date_2, $date_1, true);
/*
%r : met un - si l'intervalle est négatif, sinon rien
%y : nombre d'années
%a nombre de jours
*/

echo $intervalle->format('%r%y années  ou %a jours');
echo ("<hr />");
$intervalle_inverse = date_diff($date_1, $date_2, false);
echo $intervalle_inverse->format('%R%y années  ou %a jours');
?>

Re: Comparer deux dates

Posté : 26 déc. 2011, 01:32
par Ryle

Re: Comparer deux dates

Posté : 27 déc. 2011, 00:31
par Titiii
Bonsoir,
Merci, mais je n'ai pas résolu mon problème (je pense que j'aurais dû le mettre en php avancé)

En fait, la vérification est pour un bannissement. Lors de la connexion, je vérifie quand il a été banni et jusqu'à quand, et si la date de jusqu'à quand est dépassé à la date actuelle, l'utilisateur n'est plus banni. Quand l'utilisateur est banni, un rang spécial lui est assigné (0)

Voici le code :
if ($don1['rang'] == 0)
											{
												$sql2 = "SELECT id_membre, raison, rang_precedent, DATE_FORMAT(date_banni, '%d/%m/%Y %Hh%imin') AS date_banni, DATE_FORMAT(date_retour, '%d/%m/%Y %Hh%imin') AS date_retour FROM bannis WHERE id_membre = '".$don1['id']."' ";
												$req2 = mysql_query($sql2);
												$don2 = mysql_fetch_array($req2);
												$date_actuelle = getdate();
												
												$date_1 = date_create(getdate());
												$date_2 = date_create($don2['date_retour']);
												$intervalle = date_diff($date_2, $date_1, true);
									
												if ($intervalle['%r'] == '-')
												{
													echo 'Désolé, mais vous ne pouvez pas vous connecter. En effet, vous avez été banni le ';
													echo $don2['date_banni'];
													echo ' jusqu\'au ';
													echo $don2['date_retour'];
													echo ' pour la raison suivante : <br /><em>';
													echo $don2['raison'];
													echo '</em><br />';
												}
												else
												{
													mysql_query("UPDATE membres SET rang = '".$don2['rang_precedent']."' WHERE id = '".$don2['id_membre']."' ");
													echo "Vous n'êtes désormais plus banni, nous vous invitons à vous re-connecter <a href='connexion.php' alt='connexion'>ici</a><br />";
												}
											}
Cependant, voici les erreurs que cela m'affiche :
Warning: date_create() expects parameter 1 to be string, array given in /www/test/connexion.php on line 71

Warning: date_diff() expects parameter 1 to be DateTime, boolean given in /www/test/connexion.php on line 73
Merci d'avance (:

Re: Comparer deux dates

Posté : 27 déc. 2011, 09:46
par moogli
Salut,

Tu es sur le bon forum PHP débutants correspond bien quand on ne sait pas utiliser une fonction ;)

Le premier message d'erreur est dû au fait que la fonction getdate retourne un tableau et que la fonction date_create demande une chaîne de caractère.

Le second message d'erreur est due au premier etant donné que la fonction date_create ne fonctionne pas elle retourne false et donc tu ne passes pas un objet DateTime à la fonction de date_diff.

Je te conseille donc de bien relire la documentation de ces deux fonctions et de réécrire ton code en conséquence.
Tu peux aussi simplement utiliser la classe DateTime, comme indiqué la documentation, si tu ne donnes pas d'information elle va utiliser l'instant présent comme date par défaut.

@+