Je voudrais comparer cette date avec la date d'aujourd'hui (c'est-à-dire que j'aimerais savoir si $varc'est avant aujourd'hui ou est égal à aujourd'hui ou non)
C'est la beauté de ce format: il commande bien. Bien sûr, cela peut être moins efficace, selon votre situation exacte, mais cela pourrait également être beaucoup plus pratique et conduire à un code plus maintenable - nous aurions besoin d'en savoir plus pour vraiment faire ce jugement.
Pour le fuseau horaire correct, vous pouvez utiliser, par exemple,
date_default_timezone_set('America/New_York');
Cliquez ici pour vous référer aux fuseaux horaires PHP disponibles.
@anushr, si le fuseau horaire est nécessaire en comparaison, un décalage horaire peut être ajouté à ce jour avant la comparaison. C'est toujours plus rapide que d'essayer de convertir deux chaînes mm/dd/yyyyde date et d' heure au format en date, puis de les comparer. Cela m'inquiète toujours lorsque les développeurs ont des dates dans plusieurs fuseaux horaires dans leur système. Je pense qu'il est préférable de stocker les dates dans votre système, toujours dans un seul fuseau horaire, puis de les afficher dans le fuseau horaire requis. J'ai commencé à utiliser le yyyy-mm-ddformat (ou yyyymmdd) vers 1998 lorsque j'ai réalisé qu'il triait beaucoup plus rapidement même dans SQL Server.
AaA
59
Voici:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
En outre, quelques fonctions d'assistance supplémentaires:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
Pourquoi la logique à l'envers bizarre et les booléens superflus? Pourquoi ne pas simplement "retourner strtotime ($ time) == strtotime ('today')", "return strtotime ($ time)> time ()" et "return strtotime ($ time) <time ()"?
Bobby Jack
@Bobby Jack: J'avais plus de fonctionnalités dans ces fonctions, j'ai oublié de supprimer le code supplémentaire. Fixé maintenant.
Alix Axel
+1 sur la fonction d'assistance, en particulier isPast b / c Je viens de lancer un if(strtotime('2013-01-22 00:00:00.00') < time()){....}et cela l'a fait pour moi.
MDMoore313
47
Pour terminer BoBby Jack, l'utilisation de DateTime OBject, si vous avez php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Ce n'est pas correct. Si $ var est le jour actuel (après minuit exact), le nouveau DateTime () sera plus grand que le nouveau DateTime ($ var) et ce n'est pas vrai que $ var est avant aujourd'hui.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
Et vous avez besoin de PHP> = 5.4 pour (new DateTime ()) -> format ('Ym-d');
webrama.pl
6
Une mise en garde basée sur mon expérience, si votre objectif ne concerne que la date, veillez à inclure l'horodatage . Par exemple, disons qu'aujourd'hui l'est "2016-11-09". La comparaison impliquant l'horodatage annulera la logique ici. Exemple,
// input
$var ="2016-11-09 00:00:00.0";// check if date is today or in the futureif( time()<= strtotime($var)){// This seems right, but if it's ONLY date you are after// then the code might treat $var as past depending on// the time.}
Le code ci-dessus semble correct, mais si c'est UNIQUEMENT la date que vous souhaitez comparer, le code ci-dessus n'est pas la bonne logique. Pourquoi? Parce que time () et strtotime () fourniront un horodatage inclus. C'est-à-dire, même si les deux dates tombent le même jour, mais la différence de temps aura de l'importance. Considérez l'exemple ci-dessous:
// plain date string
$input ="2016-11-09";
Parce que l'entrée est une chaîne de date ordinaire, l'utilisation strtotime()de $inputon supposera qu'il s'agit du minuit du 2016-11-09. Donc, courir time()n'importe quand après minuit sera toujours considéré $inputcomme passé, même si c'est le même jour.
Pour résoudre ce problème, vous pouvez simplement coder, comme ceci:
if(date("Y-m-d")<= $input){
echo "Input date is equal to or greater than today.";}
Je suis sûr qu'OP a considéré cela et c'est pourquoi ils ont inclus `00: 00: 00.0 'dans leur question
AaA
6
Quelques années plus tard, j'appuie l'observation de Bobby Jack selon laquelle les dernières 24 heures ne sont pas aujourd'hui !!! Et je suis surpris que la réponse ait été tellement appréciée ...
Pour comparer si une certaine date est inférieure, égale ou supérieure à une autre, vous devez d'abord les "baisser" jusqu'au début de la journée. En d'autres termes, assurez-vous que vous parlez de la même heure 00:00:00 dans les deux dates. Cela peut être fait simplement et élégamment comme:
strtotime("today")<=> strtotime($var)
si $vara la partie heure à 00:00:00 comme l'OP spécifié.
Remplacez <=>par tout ce dont vous avez besoin (ou conservez-le comme ceci dans php 7)
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);//now compare the two datesif($intDiff >0){echo '$date1 is in the past';}else{echo 'date1 is today or in the future';}
J'espère que ça aide. Mon premier post sur stackoverflow!
Réponses:
Le transforme en valeur temporelle
Vous donne les secondes depuis
$var
Vérifie si
$var
a été dans le dernier jour.la source
Ce format est parfaitement approprié pour une comparaison de chaînes standard, par exemple
Pour obtenir la date d'aujourd'hui dans ce format, utilisez simplement:
date("Y-m-d H:i:s")
.Alors:
C'est la beauté de ce format: il commande bien. Bien sûr, cela peut être moins efficace, selon votre situation exacte, mais cela pourrait également être beaucoup plus pratique et conduire à un code plus maintenable - nous aurions besoin d'en savoir plus pour vraiment faire ce jugement.
Pour le fuseau horaire correct, vous pouvez utiliser, par exemple,
Cliquez ici pour vous référer aux fuseaux horaires PHP disponibles.
la source
mm/dd/yyyy
de date et d' heure au format en date, puis de les comparer. Cela m'inquiète toujours lorsque les développeurs ont des dates dans plusieurs fuseaux horaires dans leur système. Je pense qu'il est préférable de stocker les dates dans votre système, toujours dans un seul fuseau horaire, puis de les afficher dans le fuseau horaire requis. J'ai commencé à utiliser leyyyy-mm-dd
format (ouyyyymmdd
) vers 1998 lorsque j'ai réalisé qu'il triait beaucoup plus rapidement même dans SQL Server.Voici:
En outre, quelques fonctions d'assistance supplémentaires:
la source
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
et cela l'a fait pour moi.Pour terminer BoBby Jack, l'utilisation de DateTime OBject, si vous avez php 5.2.2+:
la source
Vous pouvez utiliser la
DateTime
classe:Les opérateurs de comparaison fonctionnent *:
Il est également possible de récupérer les valeurs d'horodatage des objets DateTime et de les comparer:
* Notez que
===
renvoie false lors de la comparaison de deux objets DateTime différents même s'ils représentent la même date.la source
$future
est devenu le passé. : Pla source
$var
égaux aussi dans OPUne mise en garde basée sur mon expérience, si votre objectif ne concerne que la date, veillez à inclure l'horodatage . Par exemple, disons qu'aujourd'hui l'est
"2016-11-09"
. La comparaison impliquant l'horodatage annulera la logique ici. Exemple,Le code ci-dessus semble correct, mais si c'est UNIQUEMENT la date que vous souhaitez comparer, le code ci-dessus n'est pas la bonne logique. Pourquoi? Parce que time () et strtotime () fourniront un horodatage inclus. C'est-à-dire, même si les deux dates tombent le même jour, mais la différence de temps aura de l'importance. Considérez l'exemple ci-dessous:
Parce que l'entrée est une chaîne de date ordinaire, l'utilisation
strtotime()
de$input
on supposera qu'il s'agit du minuit du 2016-11-09. Donc, courirtime()
n'importe quand après minuit sera toujours considéré$input
comme passé, même si c'est le même jour.Pour résoudre ce problème, vous pouvez simplement coder, comme ceci:
la source
Quelques années plus tard, j'appuie l'observation de Bobby Jack selon laquelle les dernières 24 heures ne sont pas aujourd'hui !!! Et je suis surpris que la réponse ait été tellement appréciée ...
Pour comparer si une certaine date est inférieure, égale ou supérieure à une autre, vous devez d'abord les "baisser" jusqu'au début de la journée. En d'autres termes, assurez-vous que vous parlez de la même heure 00:00:00 dans les deux dates. Cela peut être fait simplement et élégamment comme:
si
$var
a la partie heure à 00:00:00 comme l'OP spécifié.Remplacez
<=>
par tout ce dont vous avez besoin (ou conservez-le comme ceci dans php 7)De plus, évidemment, nous parlons du même fuseau horaire pour les deux. Pour la liste des fuseaux horaires pris en charge
la source
(l'exemple w3schools, cela fonctionne parfaitement)
la source
Étendre la réponse de Josua de w3schools:
J'espère que ça aide. Mon premier post sur stackoverflow!
la source
Comparer les objets date-heure:
(J'ai choisi 10 jours - Tout ce qui a plus de 10 jours est "VIEUX", sinon "NOUVEAU")
la source
Certaines réponses données ne tiennent pas compte de la journée en cours!
Voici ma proposition.
la source
Si vous faites des choses avec l'heure et les dates, Carbon est votre meilleur ami;
Installez le package puis:
lt = inférieur à, gt = supérieur à
Comme dans la question:
et beaucoup plus;
la source