Inicio > Practicando PHP > Restar dos fechas

Restar dos fechas

26 junio 2013

Generalmente el manejo de fechas puede llegar a ser entretenido, sin embargo desde la página misma de php.net he traducido una función muy útil para restar fechas y traer a nivel de arreglo el dia, mes y año, realmente mucho más manejable para nuestros desarrollos.

CÓDIGO TRADUCIDO:
function restarFechas($fechaInicial, $fechaFinal) {
$fechaFinal = strtotime($fechaFinal);
$fechaInicial = strtotime($fechaInicial);
if ($fechaFinal === false || $fechaFinal < 0 || $fechaInicial === false || $fechaInicial < 0 || $fechaFinal > $fechaInicial)
return false;

// Calcular anios
$anios = date(‘Y’, $fechaInicial) – date(‘Y’, $fechaFinal);

$mesFinal = date(‘m’, $fechaInicial);
$mesInicial = date(‘m’, $fechaFinal);

// Calcular meses
$meses = $mesFinal – $mesInicial;
if ($meses <= 0) {
$meses += 12;
$anios–;
}
if ($anios < 0)
return false;

// Calcular Dias
$organizador = array();
if ($anios > 0)
$organizador[] = $anios . (($anios == 1) ? ‘ year’ : ‘ years’);
if ($meses > 0)
$organizador[] = $meses . (($meses == 1) ? ‘ month’ : ‘ months’);
$organizador = count($organizador) > 0 ? ‘+’ . implode(‘ ‘, $organizador) : ‘now’;

$dias = $fechaInicial – strtotime($organizador, $fechaFinal);
$dias = date(‘z’, $dias);

return array(“AA” => $anios, “MM” => $meses, “DD” => $dias);
}

Su ejecución es:
$fechaInicial = date(“Y-m-d”);//Esta es la fecha actual de mi servidor
$fechaFinal = “1976-10-12”;//Esta fecha puede ser una edad por ejemplo
print_r(restarFechas($fechaInicial, $fechaFinal));
echo ‘<hr>’;
$edad = restarFechas($fechaInicial, $fechaFinal);
echo ‘edad actual ‘ . $edad[‘AA’];

Resultado:

Array ( [AA] => 36 [MM] => 8 [DD] => 13 )


edad actual 36

CÓDIGO ORIGINAL:

function dateDifference($startDate, $endDate)
{
$startDate = strtotime($startDate);
$endDate = strtotime($endDate);
if ($startDate === false || $startDate < 0 || $endDate === false || $endDate < 0 || $startDate > $endDate)
return false;

$years = date(‘Y’, $endDate) – date(‘Y’, $startDate);

$endMonth = date(‘m’, $endDate);
$startMonth = date(‘m’, $startDate);

// Calculate months
$months = $endMonth – $startMonth;
if ($months <= 0)  {
$months += 12;
$years–;
}
if ($years < 0)
return false;

// Calculate the days
$offsets = array();
if ($years > 0)
$offsets[] = $years . (($years == 1) ? ‘ year’ : ‘ years’);
if ($months > 0)
$offsets[] = $months . (($months == 1) ? ‘ month’ : ‘ months’);
$offsets = count($offsets) > 0 ? ‘+’ . implode(‘ ‘, $offsets) : ‘now’;

$days = $endDate – strtotime($offsets, $startDate);
$days = date(‘z’, $days);

return array($years, $months, $days);
}

Espero les sea de gran utilidad.

Tomado original de:

http://www.php.net/manual/es/function.date-diff.php

Categorías:Practicando PHP
A %d blogueros les gusta esto: