<?php
//
// == Fun��o para subtra��o de datas =============================================
// Autor: Fernando Barchi Finotti - fbarchi@ig.com.br
// Modificado por: Tripa Seca @ phpbrasil.com
// Data: 02 Dez 01
// ============================================================================
//

function voltadata($dias,$datahoje){

// Desmembra Data -------------------------------------------------------------

  if (ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $datahoje, $sep)) {
  $dia = $sep[1];
  $mes = $sep[2];
  $ano = $sep[3];
  } else {
    echo "<b>Formato Inv�lido de Data - $datahoje</b><br>";
  }

// Meses que o antecessor tem 31 dias -----------------------------------------

  if($mes == "01" || $mes == "02" || $mes == "04" || $mes == "06" || $mes == "08" || $mes == "09" || $mes == "11"){
    for ($cont = $dias ; $cont > 0 ; $cont--){
    $dia--;
      if($dia == 00){ // Volta o dia para dia 31 .
      $dia = 31;
      $mes = $mes -1; // Diminui um m�s se o dia zerou .
        if($mes == 00){
        $mes = 12;
        $ano = $ano - 1; // Se for Janeiro e subtrair 1 , vai para o ano anterior no m�s de dezembro.
        }
      }
    }
  }

// Meses que o antecessor tem 30 dias -----------------------------------------

  if($mes == "05" || $mes == "07" || $mes == "10" || $mes == "12" ){
    for ($cont = $dias ; $cont > 0 ; $cont--){
    $dia--;
      if($dia == 00){ // Volta o dia para dia 30 .
      $dia = 30;
      $mes = $mes -1; // Diminui um m�s se o dia zerou .
      }
    }
  }

// M�s que o antecessor � fevereiro -------------------------------------------
  if($ano % 4 == 0 ){ // se for bissexto
    if($mes == "03" ){
      for ($cont = $dias ; $cont > 0 ; $cont--){
      $dia--;
        if($dia == 00){ // Volta o dia para dia 30 .
        $dia = 29;
        $mes = $mes -1; // Diminui um m�s se o dia zerou .
        }
      }
    }
  }//fecha se bissexto...
  else{ // se n�o for bissexto
    if($mes == "03" ){
      for ($cont = $dias ; $cont > 0 ; $cont--){
        $dia--;
        if($dia == 00){ // Volta o dia para dia 30 .
          $dia = 28;
          $mes = $mes -1; // Diminui um m�s se o dia zerou .
        }
      }
    }
  }

// Confirma Sa�da de 2 d�gitos ------------------------------------------------

  if(strlen($dia) == 1){$dia = "0".$dia;}
  if(strlen($mes) == 1){$mes = "0".$mes;}

// Monta Sa�da ----------------------------------------------------------------

  $nova_data = $dia."/".$mes."/".$ano ;

  print $nova_data;
} //fecha fun��o

//
// == Fun��o para adi��o de datas =============================================
// Autor: Fernando Barchi Finotti - fbarchi@ig.com.br
// Modificado por: Tripa Seca @ phpbrasil.com
// Data: 02 Dez 01
// ============================================================================
//

function somadata($dias,$datahoje){

// Desmembra Data -------------------------------------------------------------

  if (ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $datahoje, $sep)) {
  $dia = $sep[1];
  $mes = $sep[2];
  $ano = $sep[3];
  } else {
    echo "<b>Formato Inv�lido de Data - $datahoje</b><br>";
  }

  $i = $dias;

  for($i = 0;$i<$dias;$i++){

    if ($mes == 01 || $mes == 03 || $mes == 05 || $mes == 07 || $mes == 8 || $mes == 10 || $mes == 12){
      if($mes == 12 && $dia == 31){
        $mes = 01;
        $ano++;
        $dia = 00;
      }
    if($dia == 31 && $mes != 12){
      $mes++;
      $dia = 00;
    }
  }//fecha if geral

  if($mes == 04 || $mes == 06 || $mes == 09 || $mes == 11){
    if($dia == 30){
      $dia =  00;
      $mes++;
    }
  }//fecha if geral

  if($mes == 02){
    if($ano % 4 == 0){ //ano bissexto
      if($dia == 29){
        $dia = 00;
      }
    }
    else{
      if($dia == 28){
        $dia = 00;
      }
    }
  }//FECHA IF DO M�S 2

  $dia++;

  }//fecha o for()

// Confirma Sa�da de 2 d�gitos ------------------------------------------------

  if(strlen($dia) == 1){$dia = "0".$dia;};
  if(strlen($mes) == 1){$mes = "0".$mes;};

// Monta Sa�da ----------------------------------------------------------------

$nova_data = $dia."/".$mes."/".$ano;

print $nova_data;

}//fecha a fun��o data
?>
<?php
//Exemplo:

echo "Volta Data: ";
voltadata("7","05/02/2001");
echo "<br><br>";
echo "Soma Data: ";
somadata("15","05/02/2001");
?>