Essa é a beleza desse formato: ele ordena muito bem. Claro que pode ser menos eficiente, dependendo das 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 decisão.
Para o fuso horário correto, você pode usar, por exemplo,
date_default_timezone_set('America/New_York');
Clique aqui para consultar os fusos horários do PHP disponíveis.
@anushr, se o fuso horário for necessário em comparação, a diferença de fuso horário poderá ser adicionada até a data antes da comparação. Isso ainda é mais rápido do que tentar converter duas cadeias mm/dd/yyyyde data e hora em formato para data e compará-las. Sempre me preocupa quando os desenvolvedores têm datas em vários fusos horários no sistema. Eu acho que é melhor armazenar datas no seu sistema, sempre em um fuso horário único e depois exibi-lo no fuso horário necessário. Comecei a usar o yyyy-mm-ddformato (ou yyyymmdd) por volta de 1998, quando percebi que era muito mais rápido, mesmo no SQL Server.
AaA 29/01
59
Aqui está:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
Além disso, mais algumas funções auxiliares:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
Por que a estranha lógica inversa e booleanos estranhos? Por que não apenas "return strtotime ($ time) == strtotime ('today')", "return strtotime ($ time)> time ()" e "return strtotime ($ time) <time ()"?
Bobby Jack
@ Jack Bobby: Eu tinha mais funcionalidade nessas funções, esqueci de excluir o código extra. Corrigido agora.
Alix Axel
+1 na função auxiliar, especificamente isPast b / c Acabei de executar a if(strtotime('2013-01-22 00:00:00.00') < time()){....}e isso foi feito por mim.
precisa saber é o seguinte
47
Para concluir o BoBby Jack, o uso do DateTime OBject, se você tiver o php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Isso não está correto. Se $ var for o dia atual (após a meia-noite exata), o novo DateTime () será maior que o novo DateTime ($ var) e não é verdade que $ var será anterior a hoje.
$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
E você precisa do PHP> = 5.4 para (novo DateTime ()) -> formato ('Ym-d');
Webrama.pl 18/03/2019
6
Um cuidado com base na minha experiência, se o seu objetivo envolver apenas data, tenha cuidado para incluir o carimbo de data / hora . Por exemplo, digamos que hoje é "2016-11-09". A comparação envolvendo o registro de data e hora anulará a lógica aqui. Exemplo,
// 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.}
O código acima parece correto, mas se for SOMENTE a data que você deseja comparar, o código acima não é a lógica correta. Por quê? Porque time () e strtotime () fornecerão o registro de data e hora. Ou seja, mesmo que as duas datas caiam no mesmo dia, mas a diferença de tempo será importante. Considere o exemplo abaixo:
// plain date string
$input ="2016-11-09";
Como a entrada é uma sequência de datas simples, usar strtotime()on $inputassumirá que é a meia-noite de 09/11/2016. Então, correr a time()qualquer hora depois da meia-noite sempre tratará$input como passado, mesmo que eles 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.";}
Tenho certeza que o OP considerou isso e é por isso que eles incluíram `00: 00: 00.0 'em sua pergunta
AaA
6
Poucos anos depois, eu segundo a observação de Bobby Jack de que as últimas 24 horas não são hoje !!! E estou surpreso que a resposta tenha sido tão votada ...
Para comparar se uma determinada data é menor, igual ou maior que outra, primeiro você precisa diminuí-las para o início do dia. Em outras palavras, verifique se você está falando da mesma hora 00:00:00 nas duas datas. Isso pode ser feito de forma simples e elegante como:
strtotime("today")<=> strtotime($var)
se $vartiver o horário em 00:00:00 como o OP especificado.
Substituir <=> pelo que você precisar (ou mantenha-o assim no 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';}
Eu espero que isso ajude. Meu primeiro post no stackoverflow!
Respostas:
Transforma em um valor de tempo
Dá-lhe os segundos desde
$var
Irá verificar se
$var
esteve no último dia.fonte
Esse formato é perfeitamente apropriado para uma comparação de strings padrão, por exemplo
Para obter a data de hoje nesse formato, basta usar:
date("Y-m-d H:i:s")
.Assim:
Essa é a beleza desse formato: ele ordena muito bem. Claro que pode ser menos eficiente, dependendo das 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 decisão.
Para o fuso horário correto, você pode usar, por exemplo,
Clique aqui para consultar os fusos horários do PHP disponíveis.
fonte
mm/dd/yyyy
de data e hora em formato para data e compará-las. Sempre me preocupa quando os desenvolvedores têm datas em vários fusos horários no sistema. Eu acho que é melhor armazenar datas no seu sistema, sempre em um fuso horário único e depois exibi-lo no fuso horário necessário. Comecei a usar oyyyy-mm-dd
formato (ouyyyymmdd
) por volta de 1998, quando percebi que era muito mais rápido, mesmo no SQL Server.Aqui está:
Além disso, mais algumas funções auxiliares:
fonte
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
e isso foi feito por mim.Para concluir o BoBby Jack, o uso do DateTime OBject, se você tiver o php 5.2.2+:
fonte
Você pode usar a
DateTime
classe:Operadores de comparação trabalham *:
Também é possível pegar os valores de data e hora dos objetos DateTime e compará-los:
* Observe que
===
retorna false ao comparar dois objetos DateTime diferentes, mesmo quando eles representam a mesma data.fonte
$future
tornou-se o passado. : Pfonte
$var
iguais também em OPUm cuidado com base na minha experiência, se o seu objetivo envolver apenas data, tenha cuidado para incluir o carimbo de data / hora . Por exemplo, digamos que hoje é
"2016-11-09"
. A comparação envolvendo o registro de data e hora anulará a lógica aqui. Exemplo,O código acima parece correto, mas se for SOMENTE a data que você deseja comparar, o código acima não é a lógica correta. Por quê? Porque time () e strtotime () fornecerão o registro de data e hora. Ou seja, mesmo que as duas datas caiam no mesmo dia, mas a diferença de tempo será importante. Considere o exemplo abaixo:
Como a entrada é uma sequência de datas simples, usar
strtotime()
on$input
assumirá que é a meia-noite de 09/11/2016. Então, correr atime()
qualquer hora depois da meia-noite sempre tratará$input
como passado, mesmo que eles estejam no mesmo dia.Para corrigir isso, você pode simplesmente codificar, assim:
fonte
Poucos anos depois, eu segundo a observação de Bobby Jack de que as últimas 24 horas não são hoje !!! E estou surpreso que a resposta tenha sido tão votada ...
Para comparar se uma determinada data é menor, igual ou maior que outra, primeiro você precisa diminuí-las para o início do dia. Em outras palavras, verifique se você está falando da mesma hora 00:00:00 nas duas datas. Isso pode ser feito de forma simples e elegante como:
se
$var
tiver o horário em 00:00:00 como o OP especificado.Substituir
<=>
pelo que você precisar (ou mantenha-o assim no php 7)Além disso, obviamente, estamos falando do mesmo fuso horário para ambos. Para obter uma lista dos fusos horários suportados
fonte
(o exemplo do w3schools funciona perfeitamente)
fonte
Expandindo a resposta de Josua das w3schools:
Eu espero que isso ajude. Meu primeiro post no stackoverflow!
fonte
Compare objetos de data e hora:
(Escolhi 10 dias - qualquer coisa com mais de 10 dias é "ANTIGO", ou "NOVO")
fonte
Algumas respostas dadas não têm em consideração o dia atual!
Aqui está a minha proposta.
fonte
Se você faz coisas com hora e data Carbono é seu melhor amigo;
Instale o pacote então:
lt = menor que, gt = maior que
Como na pergunta:
e muito mais;
fonte