Je veux juste comparer 2 objets datetime pour voir s'ils sont définis à la même date, mais je ne me soucie pas de la composante temporelle de l'objet. Pour le moment, j'utilise la commande date_format pour extraire des chaînes comme 'Y-m-d' pour comparer, mais cela semble gênant.
$firstDate = date_format($firstDateTimeObj, 'Y-m-d');
$secondDate = date_format($secondDateTimeObj, 'Y-m-d');
if !($firstDate == $secondDate) {
// some code
}
Je suis nouveau dans la programmation et PHP donc tous les pointeurs sont appréciés.
Utilisez la syntaxe de l'objet!
$firstDate = $firstDateTimeObj->format('Y-m-d');
$secondDate = $secondDateTimeObj->format('Y-m-d');
Vous étiez très proche de votre expression if, mais le! L'opérateur doit être entre parenthèses.
if (!($firstDate == $secondDate))
Cela peut également être exprimé comme
if ($firstDate != $secondDate)
Ma première réponse était complètement fausse, alors j'en commence une nouvelle.
La manière la plus simple, comme indiqué dans d'autres réponses, est avec date_format
. C'est presque certainement la voie à suivre. Cependant, il existe un autre moyen qui utilise la pleine puissance des classes DateTime. Utilisez diff
pour créer une instance DateInterval
, puis vérifiez sa propriété d
: si elle est 0
, c'est le même jour.
// procedural
$diff = date_diff($firstDateTimeObj, $secondDateTimeObj);
// object-oriented
$diff = $firstDateTimeObj->diff($secondDateTimeObj);
if ($diff->format('%a') === '0') {
// do stuff
} else {
// do other stuff
}
Notez que c'est presque certainement exagéré pour cette instance, mais cela pourrait être une technique utile si vous voulez faire des choses plus complexes à l'avenir.
Je pense que votre approche est bonne, mais je supprimerais le -
car ils n'ajoutent rien.
$firstDate = date_format($firstDateTimeObj, 'Ymd');
$secondDate = date_format($secondDateTimeObj, 'Ymd');
if ($firstDate != $secondDate) {
// some code
}
Recherche d'une réponse avec le même problème .. Je suis arrivé à cette solution qui me va mieux alors utilisez diff ou autre chose.
Le problème principal était d'ignorer les parties temporelles de l'objet DateTime, il suffit de le définir sur une heure, par exemple à 12:00:00
$firstDateTimeObj->setTime(12, 0, 0);
$secondDateTimeObj->setTime(12, 0, 0);
// The main problem was checking if different.. but you can use any comparison
if ($firstDateTimeObj != $secondDateTimeObj) {
}
Cela a très bien fonctionné pour moi.
$date1=DateTime::createFromFormat('Y-m-d H:i:s', '2014-07-31 07:30:00')->format('Y-m-d');
$date2=DateTime::createFromFormat('Y-m-d H:i:s', '2014-08-01 17:30:00')->format('Y-m-d');
if($date1==$date2){
echo "==";
}else{
echo "!=";
}
Vous cherchez ici la même question et j'ai trouvé une autre façon de le faire. Assez concis:
$diff = date_diff($date1,$date2);
if ($diff->days == '0') {
/* it's the same date */
}
Obtenez d'abord un objet date_interval en utilisant date_diff. L'objet date_interval a une propriété pour "jours" que vous pouvez utiliser pour obtenir le nombre total de jours entre les deux dates.
J'utilise cela pour comparer aujourd'hui aux dates d'inscription et envoyer des e-mails à des intervalles de temps spécifiques en fonction de la durée depuis laquelle ils sont membres.