saber - obtener fecha actual php mysql
Comparar fecha dada con hoy (11)
Tengo siguiente
$var = "2010-01-21 00:00:00.0"
Me gustaría comparar esta fecha con la fecha de hoy (es decir, me gustaría saber si esta $var
es antes de hoy o es igual hoy o no)
¿Qué función necesitaría usar?
Ampliando la respuesta 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'';}
Espero que esto ayude. ¡Mi primera publicación en !
Aqui tienes:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime(''today''));
}
isToday(''2010-01-22 00:00:00.0''); // true
Además, algunas funciones más de ayuda:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
Ese formato es perfectamente apropiado para una comparación de cadenas estándar, por ejemplo
if (date1 > date2)
Para obtener la fecha de hoy en ese formato, simplemente use: date("Ymd H:i:s")
.
Asi que:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {
Esa es la belleza de ese formato: ordena muy bien. Por supuesto, eso puede ser menos eficiente, dependiendo de sus circunstancias exactas, pero también podría ser mucho más conveniente y conducir a un código más fácil de mantener; necesitaríamos saber más para realmente hacer esa llamada de juicio.
Para la zona horaria correcta, puede usar, por ejemplo,
date_default_timezone_set(''America/New_York'');
Haga clic aquí para consultar las zonas horarias de PHP disponibles.
Otro ejemplo útil puede ser una clase PHP simple.
Proporciona muchos métodos y funciones de comparación.
por ejemplo:
$date = new simpleDate();
echo $date->now()->compare(''2010-01-21 00:00:00'')->isBefore();
También hay muchos ejemplos en la página de tutoriales. Por favor haga clic aquí .
Para completar BoBby Jack, use DateTime OBject, si tiene php 5.2.2+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Pocos años más tarde, secundo la observación de Bobby Jack de que las últimas 24 horas no son hoy. Y estoy sorprendido de que la respuesta haya sido tan votada ...
Para comparar si una fecha determinada es menor, igual o mayor que otra, primero debe "bajarla" al comienzo del día. En otras palabras, asegúrese de estar hablando de la misma hora 00:00:00 en ambas fechas. Esto se puede hacer simple y elegantemente como:
strtotime("today") <=> strtotime($var)
si $var
tiene la parte de tiempo en 00:00:00 como el OP especificado.
Reemplaza <=>
con lo que necesites (o mantenlo así en php 7)
Además, obviamente, estamos hablando de la misma zona horaria para ambos. Para la lista de TimeZones compatibles
Puede usar la clase DateTime
:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2020-01-01 00:00:00");
Los operadores de comparación funcionan *:
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)
También es posible tomar los valores de marca de tiempo de los objetos DateTime y compararlos:
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)
* Tenga en cuenta que ===
devuelve falso al comparar dos objetos diferentes de DateTime incluso cuando representan la misma fecha.
Una precaución basada en mi experiencia, si su propósito solo incluye la fecha, tenga cuidado de incluir la marca de tiempo . Por ejemplo, digamos que hoy es "2016-11-09"
. La comparación que implica la marca de tiempo anulará la lógica aquí. Ejemplo,
// 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.
}
El código anterior parece correcto, pero si SÓLO es la fecha que desea comparar, entonces, el código anterior no es la correcta. ¿Por qué? Porque, time () y strtotime () proporcionarán la marca de tiempo incluida. Es decir, aunque ambas fechas caen en el mismo día, pero la diferencia en el tiempo importará. Considera el siguiente ejemplo:
// plain date string
$input = "2016-11-09";
Como la entrada es cadena de fecha simple, el uso de strtotime()
en $input
supondrá que es la medianoche del 2016-11-09. Entonces, el time()
ejecución time()
cualquier momento después de la medianoche siempre tratará $input
como pasado, aunque estén en el mismo día.
Para solucionar esto, simplemente puede codificar, así:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(el ejemplo de w3schools, funciona perfecto)
$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
strtotime($var);
Lo convierte en un valor de tiempo
time() - strtotime($var);
Te da los segundos desde $var
if((time()-(60*60*24)) < strtotime($var))
Verificará si $var
ha estado dentro del último día.