Vérifier si deux PHP datetime objets sont réglés à la même date ( en ignorant le temps )
Je veux juste comparer 2 objets datetime pour voir si elles sont exposées à la même date, mais je ne m'inquiète pas à propos de la composante temporelle de l'objet. Pour le moment je suis en utilisant le date_format de commande pour extraire les chaînes comme "Y-m-d' pour comparer, mais cela semble difficile.
$firstDate = date_format($firstDateTimeObj, 'Y-m-d');
$secondDate = date_format($secondDateTimeObj, 'Y-m-d');
if !($firstDate == $secondDate) {
//some code
}
Je suis nouveau en programmation et PHP donc tous les pointeurs apprécié.
- Je suis sûr que quelqu'un va venir avec un peu d'habiles manipulations de l'horodatage ou quelque chose comme ça, mais vraiment, vous avez l'essentiel. Désolé que c'est maladroit...
- Malheureusement, PHP n'est pas un "donne-moi juste la date" option de mise en forme, de sorte que vous êtes en train de faire est la meilleure option.
- Quel est le problème avec elle? Est-ce vous causer une erreur? La seule amélioration que je peux suggérer serait d'utiliser la méthode format() sur les objets directement.
- Des acclamations. Au moins, je suis maintenant convaincu que je ne suis pas inutilement compliquer les questions - PHP est fait pour que moi 😉
Vous devez vous connecter pour publier un commentaire.
D'utiliser l'objet de la syntaxe!
Vous étiez très proche avec votre si de l'expression, mais la ! l'opérateur doit être à l'intérieur de la parenthèse.
Cela peut aussi être exprimé comme
<
,==
etc: php.net/manual/en/datetime.diff.php#example-2364. Bien sûr, ça ne résout pas le "en ignorant le temps une partie du problème, - définir la fois sur les deux objets DateTime être la même avant de le comparer à résoudre ce un.$diff=($d1->format("Ymd")-$d2->form("Ymd"))
. Son plus concise.Ma première réponse était complètement faux, je suis donc d'en créer un nouveau.
La façon la plus simple, comme dans d'autres réponses, avec
date_format
. Ce n'est presque certainement le chemin à parcourir. Cependant, il existe une autre méthode qui utilise toute la puissance de l'DateTime classes. Utilisationdiff
pour créer unDateInterval
instance, puis vérifier sond
propriété: si c'est0
, c'est le même jour.Noter que ce n'est presque certainement exagéré pour cette instance, mais il pourrait être une technique utile si vous voulez faire des trucs plus complexe à l'avenir.
2013-01-25 00:00:00
et'2013-02-25 00:00:00'
format('a')
est le bon code, je pense.format('%a')
Je pense que votre démarche est la bonne, mais je voudrais supprimer le
-
comme ils ne pas ajouter quoi que ce soit.À la recherche d'une réponse avec le même problème.. je suis arrivé à cette solution que de regarder mieux pour moi alors utiliser la commande diff ou d'autres choses.
Le principal problème a été en ignorant le temps des parties de l'objet DateTime, il suffit de le régler à un moment, par exemple, à 12:00:00
setTime(12, 0)
est assez bien, secondes et microsecondes sera automatiquement mis à 0.$DateTimeObj->setTime(12, 0, 0);
va modifier l'original de votre Objet DateTime! Si vous voulez suivre cette approche, vous devriezclone
DateTime Objets d'abord, puis de modifier les temps et de comparer des objets clonés.Cela a très bien fonctionné pour moi.
Regarde ici pour la même question et est venu avec un autre moyen de le faire. Assez concis:
D'abord obtenir un date_interval objet à l'aide de date_diff. Le date_interval objet possède une propriété pour les jours que vous pouvez utiliser pour obtenir le nombre total de jours entre les deux dates.
Je suis en utilisant ce à comparer aujourd'hui pour les dates d'inscription et d'envoyer des messages à des intervalles de temps basé sur combien de temps ils ont été un membre.
strtotime convertir un texte date en timestamp Unix : http://fr.php.net/manual/en/function.strtotime.php
Et aussi :
L'initialisation d'un
DateTime
objet et de définir la durée de00:00:00
. Ensuite, vous pouvez utiliser toute comparaison entre les dates en ignorant la fois:@Evert réponse fonctionne bien, mais on dirait vraiment mal à transformer un
DateTime
objet en chaîne de caractères et de les comparer.$today !== $tomorrow;
sera toujours vrai que$today
et$tomorrow
sont différentes instances. Et$today === $tomorrow;
sera toujours faux, même si le second les paramètres sont les mêmes.DateTime
Rapide et sale, réutilisable autant de dates que vous aimez, peut-être encore besoin de quelques ajustements:
mise à jour: moins sale.