Comparar a data indicada com a de hoje

tenho o seguinte

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

gostaria de comparar esta data com a data de hoje (isto é, gostaria de saber se este $var é antes de hoje ou é igual ou não a hoje)

que Função precisaria de usar?

Author: Salman A, 2010-01-22

11 answers

strtotime($var);

Transforma - o num valor temporal

time() - strtotime($var);
Dá-te os segundos desde então.$var
if((time()-(60*60*24)) < strtotime($var))

Irá verificar se $var esteve no último dia.

 245
Author: Tyler Carter, 2010-01-21 23:59:54

Esse formato é perfeitamente adequado para uma comparação de texto padrão, por exemplo

if (date1 > date2)

Para obter a data de hoje nesse formato, basta usar: date("Y-m-d H:i:s").

Então:

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

if ($date < $today) {
Essa é a beleza desse formato: ele ordena bem. É claro que isso pode ser menos eficiente, dependendo de suas circunstâncias exatas, mas também pode ser muito mais conveniente e levar a um código mais sustentável - precisamos saber mais para realmente fazer essa chamada de julgamento.

Para a tempo correto, você pode usar, por exemplo,

date_default_timezone_set('America/New_York');

Clique aqui para se referir aos fusos-horários disponíveis.

 175
Author: Bobby Jack, 2017-01-05 03:40:53
Aqui tens.
function isToday($time) // midnight second
{
    return (strtotime($time) === strtotime('today'));
}

isToday('2010-01-22 00:00:00.0'); // true

Também, mais algumas funções auxiliares:

function isPast($time)
{
    return (strtotime($time) < time());
}

function isFuture($time)
{
    return (strtotime($time) > time());
}
 55
Author: Alix Axel, 2010-01-22 00:28:53

Para completar o BoBby Jack, a utilização do objecto DateTime, se tiver php 5.2.2+:

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

}
 43
Author: kamakazuu, 2014-05-06 15:13:15

Podes usar o DateTime classe:

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

Os operadores de comparação funcionam*:

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)

Também é possível obter os valores de tempo dos objectos DateTime e compará-los:

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)

* Note que === devolve falso ao comparar dois objectos de DateTime diferentes, mesmo quando representam a mesma data.

 39
Author: Salman A, 2015-11-05 21:03:44
$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
Author: Hassaan, 2015-04-12 16:23:02
Alguns anos depois, apoio a observação do Bobby Jack de que os últimos 24 horas não são hoje!!! E surpreende-me que a resposta tenha sido tão votada...

Para comparar se uma determinada data é menor, igual ou maior do que outra, primeiro você precisa transformá-los "para baixo" para o início do dia. Por outras palavras, certifica-te de que estás a falar da mesma hora em ambos os encontros. Isto pode ser feito de forma simples e elegante como:

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

Se $var tem o horário às 00: 00 como a operação descrever.

Substitua <=> por tudo o que precisar (ou mantenha-o assim em php 7)

Além disso, obviamente, estamos a falar do mesmo fuso horário para ambos. Para a lista dos Fusos-Horários suportados
 6
Author: Nelu Bidonelu, 2018-02-05 11:40:12

Uma precaução baseada na minha experiência, Se o seu propósito envolve apenas Data, então tenha cuidado para incluir a data de tempo. Por exemplo, digamos que hoje é "2016-11-09". A comparação que envolve o timestamp anulará a lógica aqui. Exemplo,

//  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.
}

O código acima parece certo, mas se é apenas a data que você quer comparar, então, o código acima não é a lógica certa.Porquê? Porque, time() e strtotime () irão fornecer incluem timestamp. Isto é, embora ambas as datas caiam em no mesmo dia, mas a diferença de tempo vai importar. Considere o exemplo abaixo:

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

Porque a entrada é uma cadeia de datas simples, usando strtotime() em {[5] } irá assumir que é a meia-noite de 2016-11-09. Então, correr depois da meia-noite sempre tratará $input Como passado, mesmo que estejam no mesmo dia.

Para corrigir isso, você pode simplesmente codificar, assim:

if (date("Y-m-d") <= $input)
{
    echo "Input date is equal to or greater than today.";
}
 5
Author: Lynnell Emmanuel Neri, 2016-11-09 04:50:09
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

(o exemplo w3schools, funciona perfeitamente)

 5
Author: Richard, 2017-01-10 07:14:19

Um outro exemplo útil pode ser a classe PHP simples.

Ele fornece muitos métodos, bem como funções de comparação.

Por exemplo:

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

Também há muitos exemplos na página de tutoriais. por favor, Clique aqui .

 3
Author: isa, 2014-03-30 10:00:28
Expandindo a resposta de Josua dos 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';}
Espero que isto ajude. O meu primeiro posto no stackoverflow!
 2
Author: enceladus, 2018-03-13 16:22:10