web-dev-qa-db-fra.com

Comparer la date donnée avec aujourd'hui

J'ai suivi

$var = "2010-01-21 00:00:00.0"

J'aimerais comparer cette date à la date d'aujourd'hui (c'est-à-dire j'aimerais savoir si ce $var est avant aujourd'hui ou s'il est égal aujourd'hui ou non)

Quelle fonction aurais-je besoin d'utiliser?

188
alexus
strtotime($var);

Le transforme en une valeur de temps

time() - strtotime($var);

Vous donne les secondes depuis $var

if((time()-(60*60*24)) < strtotime($var))

Va vérifier si $var a été dans le dernier jour.

263
Tyler Carter

Ce format convient parfaitement à une comparaison de chaîne standard, par exemple.

if (date1 > date2)

Pour obtenir la date d'aujourd'hui dans ce format, utilisez simplement: date("Y-m-d H:i:s").

Alors:

$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";

if ($date < $today) {

C'est la beauté de ce format: il ordonne bien. Bien sûr, cela peut être moins efficace, selon vos circonstances, mais cela pourrait également être beaucoup plus pratique et conduire à un code plus facile à gérer - nous aurions besoin de mieux connaître ce jugement appel.

Pour le fuseau horaire correct, vous pouvez utiliser, par exemple,

date_default_timezone_set('America/New_York');

Cliquez ici pour faire référence aux fuseaux horaires PHP disponibles.

189
Bobby Jack

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());
}
56
Alix Axel

Pour compléter BoBby Jack, l'utilisation de DateTime OBject, si vous avez php 5.2.2+:

if(new DateTime() > new DateTime($var)){
    // $var is before today so use it

}
45
kamakazuu

Vous pouvez utiliser la classe DateTime :

$past   = new DateTime("2010-01-01 00:00:00");
$now    = new DateTime();
$future = new DateTime("2020-01-01 00:00:00");

Les opérateurs de comparaison travaillent *:

var_dump($past   < $now);         // bool(true)
var_dump($future < $now);         // bool(false)

var_dump($now == $past);          // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future);        // bool(false)

var_dump($past   > $now);         // bool(false)
var_dump($future > $now);         // bool(true)

Il est également possible de récupérer les valeurs d'horodatage à partir d'objets DateTime et de les comparer:

var_dump($past  ->getTimestamp());                        // int(1262286000)
var_dump($now   ->getTimestamp());                        // int(1431686228)
var_dump($future->getTimestamp());                        // int(1577818800)
var_dump($past  ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)

* Notez que === renvoie false lorsque vous comparez deux objets DateTime différents, même s'ils représentent la même date.

40
Salman A
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');

var_dump(strtotime($today) > strtotime($expiry)); //false or true
12
Hassan

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 élevée ...

Pour comparer si une certaine date est inférieure, égale ou supérieure à une autre, vous devez d’abord la réduire au début de la journée. En d'autres termes, assurez-vous que vous parlez de la même heure 00:00:00 aux deux dates . Cela peut être fait simplement et élégamment comme

strtotime("today") <=> strtotime($var)

si $var a l'heure indiquée sur 00:00:00 comme l'OP spécifié.

Remplacez <=> par tout ce dont vous avez besoin (ou conservez-le ainsi dans php 7)

De plus, évidemment, nous parlons du même fuseau horaire pour les deux. Pour liste des TimeZones supportés

6
Nelu Bidonelu
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

(l'exemple w3schools, cela fonctionne parfaitement)

5
Richard

Une mise en garde basée sur mon expérience, si votre objectif ne concerne que la date, veillez à inclure l’horodatage . Par exemple, supposons qu'aujourd'hui soit "2016-11-09". La comparaison impliquant un horodatage annulera la logique ici. Exemple,

//  input
$var = "2016-11-09 00:00:00.0";

//  check if date is today or in the future
if ( 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 juste, mais si c'est SEULEMENT la date que vous voulez comparer, alors 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 importera. Considérons l'exemple ci-dessous:

//  plain date string
$input = "2016-11-09";

Comme l'entrée est une chaîne de date simple, utiliser strtotime() sur $input supposera qu'il s'agit du minuit du 2016-11-09. Ainsi, si vous exécutez time() à tout moment après minuit, $input sera toujours considéré comme passé, même s’ils se trouvent 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.";
}
5

Un autre exemple utile peut être une simple classe PHP.

Il fournit de nombreuses méthodes ainsi que des fonctions de comparaison.

par exemple:

$date = new simpleDate();
echo $date->now()->compare('2010-01-21 00:00:00')->isBefore();

Il y a aussi beaucoup d'exemples dans la page des tutoriels. Cliquez ici s'il vous plait .

3
isa

Répondant à la réponse de Josua de w3schools:

//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 dates
if ($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!

2
enceladus

Comparer les objets date/heure: 

(J'ai choisi 10 jours - Tout ce qui a plus de 10 jours est "vieux", sinon "nouveau")

$now   = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
    echo "OLD! " . $yourdate->format('m/d/Y');
}else{
    echo "NEW! " . $yourdate->format('m/d/Y');
}
1
Kevin

Si vous faites des choses avec le temps et les dates Carbon vous êtes le meilleur ami;

Installez le paquet alors:

$theDay = Carbon::make("2010-01-21 00:00:00.0");

$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))

lt = inférieur à, gt = supérieur à

Comme dans la question:

$theDay->gt(Carbon::today()) ? true : false;

et beaucoup plus;

0
Lucas M. Oliveira