Jump to content
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!!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By manolegal
      Boa tarde
      Gostaria de colocar o valor de um campo bootstrap/vue.js em uma variável php, porém não estou conseguindo. É a primeira vez que estou trabalhando com vue.
      O campo está trazendo o valor correto:
      <section class="scans"> <h2>Scans</h2> <ul v-if="scans.length === 0"> <li class="empty">No scans yet</li> </ul> <transition-group name="scans" tag="ul"> <li v-for="scan in scans" key="scan.date" title="scan.content">{{ scan.content }}</li> </transition-group> </section> var app = new Vue({ el: '#app', data: { scanner: null, activeCameraId: null, cameras: [], scans: [] }, mounted: function () { var self = this; self.scanner = new Instascan.Scanner({ video: document.getElementById('preview'), scanPeriod: 5 }); self.scanner.addListener('scan', function (content, image) { var element = document.getElementById('valor'); element.innerHTML = content self.scans.unshift({ date: +(Date.now()), content: content }); }); Instascan.Camera.getCameras().then(function (cameras) { self.cameras = cameras; if (cameras.length > 0) { self.activeCameraId = cameras[1].id; self.scanner.start(cameras[1]); } else { console.error('Nenhuma Câmera conectada. Verifique!'); } }).catch(function (e) { console.error(e); }); }, methods: { formatName: function (name) { return name || '(unknown)'; }, selectCamera: function (camera) { this.activeCameraId = camera.id; this.scanner.start(camera); } } }); Preciso pegar o valor escaneado constante no campo, para passar para próximo formulário. No aguardo.
    • By Porta
      Moderador... Pode apagar este topico?
       
       
    • By RogérioSilva
      Estou procurando alguma função que consiga criar vários registros no mysql partindo deste form:
      (O input CRIAR NOVO CAMPO, cria novos input com javascript, então posso criar vários campos e escrever o nome de várias escolas um embaixo da outra.)
       
      <form name="novo" method="post" enctype="multipart/form-data" action=""> <input type="text" value="Nome Escolas" name="nome" size="30"> <input class="approvebutton" type="submit" id="Send" name="escola" value="CADASTRAR"> <input class="approvebutton" type="submit" id="NEW" name="NEW" value="CRIAR NOVO CAMPO"> </form>  
      Mas minha dúvida é como ficaria a parte em PHP, para poder criar vários registros no banco de dados? Se eu criar 10 input e escrever o nome de 10 escolas, como ficaria? a parte em PHP está assim até o momento
       
      if($_POST['novo']){ $escola = $_POST["escola"]; $now = date('Y-m-d H:i:s', (time()+(60*60*3))); if ($escola==NULL){ echo "<script>location.href='erro.php'</script>"; } else{ $query = "INSERT INTO escolas (escola) VALUES ('$escola', '$now')"; $result = mysql_query($query) or die ("Erro ao Inserir"); echo "<script>location.href='adicionado.php'</script>"; } }  
      Eu já pesquisei e vi que é algo que tem que usar Array e implode no INSERT, mas na prática não consegui, alguém pode me ajudar?
    • By rogerblower
      Pessoal tenho a seguinte tabela
      id | id_etapa | id_evento | posicao | nome | pontos
      1  |  1             |        2         |   1           | joao      |  10
      2  |  1             |        2         |   2           | pedro    |  9
      3  |  1             |        2         |   3           | maria    |  8
      4  |  1             |       2          |   4           | jose       |  7
      5  |  2             |      2          |   3           | joao       |  8
      6  |  2             |  2              |   1           | pedro    | 10
      7  |  2             |   2             |  2            | maria    |  9
      8  |  2             |  2              |   4          | jose        |  7
       
      O resultado da consulta pretendido é este
      Pos  |  nome |   pontos
      1      |  pedro   | 19
      2      |   joao   | 18
      3      |  maria  |  17
      4      |  jose  |  14
       
      Com esta consulta não ordenando a coluna posicao como esperado, ela repete a posicao e não faz a soma, ex:
       1     joao     10
       1     pedro     10
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome, posicao ORDER BY pontos DESC posicao ASC"); Com esta outra consulta a soma esta correta o agrupamento nome esta correto, não se repetem, mas a coluna posicao fica fora de ordem;
       
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome ORDER BY pontos DESC posicao ASC"); Não estou conseguindo acertar a consulta, alguém me ajuda?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.