php - session_start - strtotime to date
PHP: cómo verificar si una fecha es hoy, ayer o mañana (7)
Aquí hay una versión más pulida de la respuesta aceptada. Acepta solo marcas de tiempo y devuelve una fecha relativa o una cadena de fecha formateada para todo +/- 2 días
<?php
/**
* Relative time
*
* date Format http://php.net/manual/en/function.date.php
* strftime Format http://php.net/manual/en/function.strftime.php
* latter can be used with setlocale(LC_ALL, ''de_DE@euro'', ''de_DE'', ''deu_deu'');
*
* @param timestamp $target
* @param timestamp $base start time, defaults to time()
* @param string $format use date(''Y'') or strftime(''%Y'') format string
* @return string
*/
function relative_time($target, $base = NULL, $format = ''Y-m-d H:i:s'')
{
if(is_null($base)) {
$base = time();
}
$baseDate = new DateTime();
$targetDate = new DateTime();
$baseDate->setTimestamp($base);
$targetDate->setTimestamp($target);
// don''t modify original dates
$baseDateTemp = clone $baseDate;
$targetDateTemp = clone $targetDate;
// normalize times -> reset to midnight that day
$baseDateTemp = $baseDateTemp->modify(''midnight'');
$targetDateTemp = $targetDateTemp->modify(''midnight'');
$interval = (int) $baseDateTemp->diff($targetDateTemp)->format(''%R%a'');
d($baseDate->format($format));
switch($interval) {
case 0:
return (string) ''today'';
break;
case -1:
return (string) ''yesterday'';
break;
case 1:
return (string) ''tomorrow'';
break;
default:
if(strpos($format,''%'') !== false )
{
return (string) strftime($format, $targetDate->getTimestamp());
}
return (string) $targetDate->format($format);
break;
}
}
setlocale(LC_ALL, ''de_DE@euro'', ''de_DE'', ''deu_deu'');
echo relative_time($weather->time, null, ''%A, %#d. %B''); // Montag, 6. August
echo relative_time($weather->time, null, ''l, j. F''); // Monday, 6. August
Me gustaría comprobar si hay una fecha hoy, mañana, ayer o de lo contrario. Pero mi código no funciona.
Código:
$timestamp = "2014.09.02T13:34";
$date = date("d.m.Y H:i");
$match_date = date(''d.m.Y H:i'', strtotime($timestamp));
if($date == $match_date) {
//Today
} elseif(strtotime("-1 day", $date) == $match_date) {
//Yesterday
} elseif(strtotime("+1 day", $date) == $match_date) {
//Tomorrow
} else {
//Sometime
}
El Código siempre va en el caso else.
Creo que esto te ayudará:
<?php
$date = new DateTime();
$match_date = new DateTime($timestamp);
$interval = $date->diff($match_date);
if($interval->days == 0) {
//Today
} elseif($interval->days == 1) {
if($interval->invert == 0) {
//Yesterday
} else {
//Tomorrow
}
} else {
//Sometime
}
No hay funciones incorporadas para hacer eso en Php (shame ^^). Si desea comparar una cadena de fecha con la fecha actual, puede usar un substr
sencillo para lograrlo:
if (substr($timestamp, 0, 10) === date(''Y.m.d'')) { today }
elseif (substr($timestamp, 0, 10) === date(''Y.m.d'', strtotime(''-1 day'')) { yesterday }
Sin conversión de fecha, simple.
Pase la fecha a la función.
<?php
function getTheDay($date)
{
$curr_date=strtotime(date("Y-m-d H:i:s"));
$the_date=strtotime($date);
$diff=floor(($curr_date-$the_date)/(60*60*24));
switch($diff)
{
case 0:
return "Today";
break;
case 1:
return "Yesterday";
break;
default:
return $diff." Days ago";
}
}
?>
Primero. Usted tiene un error al usar la función strtotime
ver la documentación de PHP
int strtotime ( string $time [, int $now = time() ] )
Necesita modificar su código para pasar la indicación de fecha y hora entera a esta función.
Segundo. Utiliza el formato dmY H: i que incluye la parte de tiempo. Si desea comparar solo las fechas, debe eliminar la parte de tiempo, por ejemplo `$ date = date (" dmY ");` `
Tercero. No estoy seguro si funciona de la misma manera para usted, pero mi PHP no comprende el formato de fecha de $timestamp
y devuelve 01.01.1970 02:00 en $match_date
$timestamp = "2014.09.02T13:34";
date(''d.m.Y H:i'', strtotime($timestamp)) === "01.01.1970 02:00";
strtotime($timestamp)
comprobar si strtotime($timestamp)
devuelve la cadena de fecha correcta. Si no, debe especificar el formato que se utiliza en la variable $timestamp
. Puede hacerlo usando una de las funciones date_parse_from_format
o DateTime::createFromFormat
Este es un ejemplo de trabajo:
$timestamp = "2014.09.02T13:34";
$today = new DateTime(); // This object represents current date/time
$today->setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison
$match_date = DateTime::createFromFormat( "Y.m.d//TH:i", $timestamp );
$match_date->setTime( 0, 0, 0 ); // reset time part, to prevent partial comparison
$diff = $today->diff( $match_date );
$diffDays = (integer)$diff->format( "%R%a" ); // Extract days count in interval
switch( $diffDays ) {
case 0:
echo "//Today";
break;
case -1:
echo "//Yesterday";
break;
case +1:
echo "//Tomorrow";
break;
default:
echo "//Sometime";
}
<?php
$current = strtotime(date("Y-m-d"));
$date = strtotime("2014-09-05");
$datediff = $date - $current;
$difference = floor($datediff/(60*60*24));
if($difference==0)
{
echo ''today'';
}
else if($difference > 1)
{
echo ''Future Date'';
}
else if($difference > 0)
{
echo ''tomarrow'';
}
else if($difference < -1)
{
echo ''Long Back'';
}
else
{
echo ''yesterday'';
}
?>
function getRangeDateString($timestamp) {
if ($timestamp) {
$currentTime=strtotime(''today'');
// Reset time to 00:00:00
$timestamp=strtotime(date(''Y-m-d 00:00:00'',$timestamp));
$days=round(($timestamp-$currentTime)/86400);
switch($days) {
case ''0'';
return ''Today'';
break;
case ''-1'';
return ''Yesterday'';
break;
case ''-2'';
return ''Day before yesterday'';
break;
case ''1'';
return ''Tomorrow'';
break;
case ''2'';
return ''Day after tomorrow'';
break;
default:
if ($days > 0) {
return ''In ''.$days.'' days'';
} else {
return ($days*-1).'' days ago'';
}
break;
}
}
}