Ir para conteúdo
Daniel A

Cadastrar data Mysql

Recommended Posts

Boa noite a todos, estou fazendo um sistema de fluxo financeiro e preciso gravar no banco os dados de contratos e gerar o fluxo .... só que não estou conseguindo imaginar como montar o calculo das parcelas... exemplo:

 

Aluguel vencimento todo dia 15 (contrato 36 meses) ..... preciso gerar 36 parcelas todo o dia 15 ..... pensei em dar um explode na data atual e ficar somando com o while ... mas não deu muito certo...

 

Alguém ja fez algo parecido ?? 

 

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Daniel A disse:

Boa noite a todos, estou fazendo um sistema de fluxo financeiro e preciso gravar no banco os dados de contratos e gerar o fluxo .... só que não estou conseguindo imaginar como montar o calculo das parcelas... exemplo:

 

Aluguel vencimento todo dia 15 (contrato 36 meses) ..... preciso gerar 36 parcelas todo o dia 15 ..... pensei em dar um explode na data atual e ficar somando com o while ... mas não deu muito certo...

 

Alguém ja fez algo parecido ?? 

 

Obrigado!!

Boa noite veja se alguns destes vai te ajudar

 

Somando dias utéis a uma data específica usando o PHP

 

O que ela faz é pegar a data informada, somar uma quantidade de dias úteis a ela e retornar uma nova data com a soma realizada.

Se você informar à função uma data no formato brasileiro – dd/mm/aaaa – ela irá convertê-la para o padrão americano – aaaa-mm-dd.

Esse padrão americano é utilizado pelo MySQL quando você define um campo com o formato DATE.

Caso sua data esteja armazenada no formato DATETIME a função irá pegar somente a data e excluir o horário.

// #################################################
//             ##########Wa7 Solucion##########
// ########################################################

function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7) {

    // Caso seja informado uma data do MySQL do tipo DATETIME - aaaa-mm-dd 00:00:00
    // Transforma para DATE - aaaa-mm-dd
    $str_data = substr($str_data,0,10);
    // Se a data estiver no formato brasileiro: dd/mm/aaaa
    // Converte-a para o padrão americano: aaaa-mm-dd
    if ( preg_match("@/@",$str_data) == 1 )
    {
        $str_data = implode("-", array_reverse(explode("/",$str_data)));
    }
    $array_data = explode('-', $str_data);
    $count_days = 0;
    $int_qtd_dias_uteis = 0;
    while ( $int_qtd_dias_uteis < $int_qtd_dias_somar )
    {
        $count_days++;
        if ( ( $dias_da_semana = gmdate('w', strtotime('+'.$count_days.' day', mktime(0, 0, 0, $array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' )
        {
           $int_qtd_dias_uteis++;
        }
    }
    return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data)));
}

 

Somar Dias Úteis Segue o link Official

//somar_dias_uteis( '14/11/2013', '3', '' );

// data_limite.php

<?php
require_once 'feriado.php';
/*
  formas diferentes de usar a funcao
  1- qdt de dias uteis a contar apartir de uma data especifica ou fixa você pode passar a data direto nos paremetros da funcao
  function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7,$feriados)
  chamando a funcao
  somar_dias_uteis('09/04/2009','','');
  ou
  $data = date('Y-m-d');
  somar_dias_uteis('$data','','');
  2- nao precisa passar os dias como parametro da funcao tipo function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados)
  para chamar a funcao fica
  somar_dias_uteis('09/04/2009','4','');
  ou
  $data = date('Y-m-d');
  somar_dias_uteis('$data','4','');
 */
function somar_dias_uteis( $str_data, $int_qtd_dias_somar, $feriados )
{
    // Caso seja informado uma data do MySQL do tipo DATETIME - aaaa-mm-dd 00:00:00
    // Transforma para DATE - aaaa-mm-dd
    $str_data = substr( $str_data, 0, 10 );
    // Se a data estiver no formato brasileiro: dd/mm/aaaa
    // Converte-a para o padrão americano: aaaa-mm-dd
    if ( preg_match( "@/@", $str_data ) == 1 ) {
        $str_data = implode( "-", array_reverse( explode( "/", $str_data ) ) );
    }
    // chama a funcao que calcula a pascoa
    $pascoa_dt = dataPascoa( date( 'Y' ) );
    $aux_p = explode( "/", $pascoa_dt );
    $aux_dia_pas = $aux_p[0];
    $aux_mes_pas = $aux_p[1];
    $pascoa = "$aux_mes_pas" . "-" . "$aux_dia_pas"; // crio uma data somente como mes e dia
    // chama a funcao que calcula o carnaval
    $carnaval_dt = dataCarnaval( date( 'Y' ) );
    $aux_carna = explode( "/", $carnaval_dt );
    $aux_dia_carna = $aux_carna[0];
    $aux_mes_carna = $aux_carna[1];
    $carnaval = "$aux_mes_carna" . "-" . "$aux_dia_carna";
    // chama a funcao que calcula corpus christi
    $CorpusChristi_dt = dataCorpusChristi( date( 'Y' ) );
    $aux_cc = explode( "/", $CorpusChristi_dt );
    $aux_cc_dia = $aux_cc[0];
    $aux_cc_mes = $aux_cc[1];
    $Corpus_Christi = "$aux_cc_mes" . "-" . "$aux_cc_dia";
    // chama a funcao que calcula a sexta feira santa
    $sexta_santa_dt = dataSextaSanta( date( 'Y' ) );
    $aux = explode( "/", $sexta_santa_dt );
    $aux_dia = $aux[0];
    $aux_mes = $aux[1];
    $sexta_santa = "$aux_mes" . "-" . "$aux_dia";
    $feriados = array( "01-01", $carnaval, $sexta_santa, $pascoa, $Corpus_Christi, "04-21", "05-01", "06-12", "07-09", "07-16", "09-07", "10-12", "11-02", "11-15", "12-25" );
    $array_data = explode( '-', $str_data );
    $count_days = 0;
    $int_qtd_dias_uteis = 0;
    while ( $int_qtd_dias_uteis < $int_qtd_dias_somar ) {
        $count_days++;
        $day = date( 'm-d', strtotime( '+' . $count_days . 'day', strtotime( $str_data ) ) );
        if ( ($dias_da_semana = gmdate( 'w', strtotime( '+' . $count_days . ' day', gmmktime( 0, 0, 0, $array_data[1], $array_data[2], $array_data[0] ) ) ) ) != '0' && $dias_da_semana != '6' && !in_array( $day, $feriados ) ) {
            $int_qtd_dias_uteis++;
        }
    }
    return gmdate( 'd/m/Y', strtotime( '+' . $count_days . ' day', strtotime( $str_data ) ) );
}
//feriado.php
<?php
// dataPascoa(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo da Pascoa
// Retorna o dia da pascoa no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//	 Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//	 Padrao: d/m/Y
function dataPascoa( $ano = false, $form = "d/m/Y" ) {
    $ano = $ano ? $ano : date( "Y" );
    if ( $ano < 1583 ) {
        $A = ($ano % 4);
        $B = ($ano % 7);
        $C = ($ano % 19);
        $D = ((19 * $C + 15) % 30);
        $E = ((2 * $A + 4 * $B - $D + 34) % 7);
        $F = ( int ) (($D + $E + 114) / 31);
        $G = (($D + $E + 114) % 31) + 1;
        return date( $form, mktime( 0, 0, 0, $F, $G, $ano ) );
    } else {
        $A = ($ano % 19);
        $B = ( int ) ($ano / 100);
        $C = ($ano % 100);
        $D = ( int ) ($B / 4);
        $E = ($B % 4);
        $F = ( int ) (($B + 8) / 25);
        $G = ( int ) (($B - $F + 1) / 3);
        $H = ((19 * $A + $B - $D - $G + 15) % 30);
        $I = ( int ) ($C / 4);
        $K = ($C % 4);
        $L = ((32 + 2 * $E + 2 * $I - $H - $K) % 7);
        $M = ( int ) (($A + 11 * $H + 22 * $L) / 451);
        $P = ( int ) (($H + $L - 7 * $M + 114) / 31);
        $Q = (($H + $L - 7 * $M + 114) % 31) + 1;
        return date( $form, mktime( 0, 0, 0, $P, $Q, $ano ) );
    }
}
// dataCarnaval(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo do Carnaval
// Retorna o dia do Carnaval no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//	 Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//	 Padrao: d/m/Y
function dataCarnaval( $ano = false, $form = "d/m/Y" ) {
    $ano = $ano ? $ano : date( "Y" );
    $a = explode( "/", dataPascoa( $ano ) );
    return date( $form, mktime( 0, 0, 0, $a[1], $a[0] - 47, $a[2] ) );
}
// dataCorpusChristi(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo do Corpus Christi
// Retorna o dia do Corpus Christi no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//	 Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//	 Padrao: d/m/Y
function dataCorpusChristi( $ano = false, $form = "d/m/Y" ) {
    $ano = $ano ? $ano : date( "Y" );
    $a = explode( "/", dataPascoa( $ano ) );
    return date( $form, mktime( 0, 0, 0, $a[1], $a[0] + 60, $a[2] ) );
}
// dataSextaSanta(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo da Sexta-feira santa ou da Paixao.
// Retorna o dia da Sexta-feira santa ou da Paixao no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
// Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
// Padrao: d/m/Y
function dataSextaSanta( $ano = false, $form = "d/m/Y" ) {
    $ano = $ano ? $ano : date( "Y" );
    $a = explode( "/", dataPascoa( $ano ) );
    return date( $form, mktime( 0, 0, 0, $a[1], $a[0] - 2, $a[2] ) );
}
?>

 

 

 veja aqui no FÓRUM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso deve calcular corretamente as 36 parcelas.

<?php

//dia 15 do mês corrente
$start = DateTime::createFromFormat('d' , '15');

//intervalo de 1 mês
$interval = new DateInterval('P1M');

//Valida se o dia 15 do mês corrente já não passou
if ($start < (new DateTime()))
{
    //adiciona 1 mês caso seja pro dia 15 do mês que vem
    $start->add($interval);
}

//Calcula os períodos, data inicial + 35 ocorrências
foreach(new DatePeriod($start , $interval , 35) as $key => $date)
{
    $i = $key +1;
    echo "{$i} -> {$date->format('d/m/Y')}\n";
}

Pra entender um pouco mais:

https://forum.imasters.com.br/topic/550659-resolvido-erro-em-dateperiod-php-encontra-2-meses-ao-invés-de-3/

https://forum.imasters.com.br/topic/535853-como-pegar-a-diferença-entre-datas/?do=findComment&amp;comment=2139989

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.