Pregunta
Estoy tratando de uso date_diff()
:
$datetime1 = date_create('19.03.2010');
$datetime2 = date_create('22.04.2010');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%d days');
Su no funciona para mí, da un error:
Call to undefined function date_diff()
¿Cómo puedo conseguir que funcione?
PHP 5.2 se utiliza.
Gracias.
Solución
El date_diff función requiere una versión PHP de 5,3 o mayor.
Actualizar
Un ejemplo para PHP 5.2 (tomado de los comentarios de los usuarios date_diff).
<?php
function date_diff($date1, $date2) {
$current = $date1;
$datetime2 = date_create($date2);
$count = 0;
while(date_create($current) < $datetime2){
$current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current)));
$count++;
}
return $count;
}
echo (date_diff('2010-3-9', '2011-4-10')." days <br \>");
?>
Otros consejos
Esta es una versión que no utilice objetos Date, pero éstos no sirven de nada de todos modos en el punto 5.2.
function date_diff($d1, $d2){
$d1 = (is_string($d1) ? strtotime($d1) : $d1);
$d2 = (is_string($d2) ? strtotime($d2) : $d2);
$diff_secs = abs($d1 - $d2);
return floor($diff_secs / (3600 * 24));
}
function date_diff($date1, $date2) {
$count = 0;
//Ex 2012-10-01 and 2012-10-20
if(strtotime($date1) < strtotime($date2))
{
$current = $date1;
while(strtotime($current) < strtotime($date2)){
$current = date("Y-m-d",strtotime("+1 day", strtotime($current)));
$count++;
}
}
//Ex 2012-10-20 and 2012-10-01
else if(strtotime($date2) < strtotime($date1))
{
$current = $date2;
while(strtotime($current) < strtotime($date1)){
$current = date("Y-m-d",strtotime("+1 day", strtotime($current)));
$count++;
}
$current = $current * -1;
}
return $count; }
En primer lugar convertir a formato ambas fechas / dd / aaaa mm continuación, haga lo siguiente:
$DateDiff = floor( strtotime($datetime2 ) - strtotime( $datetime1 ) ) / 86400 ;
//this will yield the resultant difference in days
La conversión de su DateTime a Unix tipo de fecha, y restando uno del otro: El formato -.> ( "U") es donde el DateTime es convertida
$datetime1 = date_create('19.03.2010');
$datetime2 = date_create('22.04.2010');
$intervalInDays = ($datetime2->format("U") - $datetime1->format("U"))/(3600 * 24);
No estoy seguro si esto es Y2K38 seguro, pero es una de las más simples date_diff soluciones.