Comparer deux dates

Eléphant du PHP | 71 Messages

22 déc. 2011, 23:45

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.

ViPHP
ViPHP | 2577 Messages

23 déc. 2011, 09:07

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.

Mammouth du PHP | 2278 Messages

23 déc. 2011, 10:27

http://fr2.php.net/manual/fr/class.datetime.php
contient des informations passionnantes sur les dates, les heures et autres....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 71 Messages

23 déc. 2011, 11:03

La première est un DATETIME.

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

Mammouth du PHP | 2278 Messages

25 déc. 2011, 21:09

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');
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 déc. 2011, 01:32

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 71 Messages

27 déc. 2011, 00:31

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 (:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 déc. 2011, 09:46

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.

@+
Il en faut peu pour être heureux ......