Leco RP 6 Denunciar post Postado Maio 31, 2012 Olá pessoal, Estou com uma dúvida: Como inserir num banco MySQL uma sequência de datas a partir da quantidade de dias? Exemplo: Tabela "grade" possui 3 colunas, ID, DIA e STATUS (sendo que o STATUS e o ID receberão um valor padrão é não são relevantes para essa dúvida). O sistema receberá uma DATA e a quantidade de dias do período que deseja criar a GRADE. Supondo que foi informado a data 01/06/2012 e o número de dias sendo 5, a tabela ficaria assim: ID----DIA-----STATUS 1 01/06/2012 N 2 02/06/2012 N 3 03/06/2012 N 4 04/06/2012 N 5 05/06/2012 N Como poderia proceder para chegar nesse exemplo? Agradeço desde já. Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Maio 31, 2012 public function calcular($data1, $qtd = 5){ //$data2 = (!empty($data2)) ? $data2 : date('Y-m-d'); $timestamp1 = strtotime($data1); $timestamp2 = strtotime("{$qtd} day", $data1); $datas = array(); while ( $timestamp1 <= $timestamp2 ){ $datas[] = date( 'd/m', $timestamp1 ); $timestamp1 += 86400; } $ret['datas'] = $datas; $ret['total'] = count($ret['datas']); return $ret; } função que vai retornar todos os dias de um intervalo. você pode fazer uma adaptação mais ou menos assim: Créditos pela Classe: Beraldo. http://forum.imasters.com.br/user/34746-beraldo/ só fiz algumas mudanças. Compartilhar este post Link para o post Compartilhar em outros sites
Ricardo Andrietta 1 Denunciar post Postado Maio 31, 2012 você também pode fazer assim: function geraData($dataInicial, $quantidadeDias) { list($ano, $mes, $dia) = explode('-', $dataInicial); for ($i = (int) $dia; $i <= $quantidadeDias; $i++) { $novaData = mktime(0, 0, 0, $mes, $i, 2012); echo date("d/m/Y", $novaData) . '<br>'; } } geraData('2012-06-01', 5); Lembrando que você deve validar a data ($dataInicial) abs Dei uma refinada: function geraData(DateTime $dataInicial, $quantidadeDias) { $ts = $dataInicial->getTimestamp(); $ano = date("Y", $ts); $mes = date("m", $ts); $dia = date("d", $ts); for ($i = (int) $dia; $i < $dia+$quantidadeDias; $i++) { $novaData = mktime(0, 0, 0, $mes, $i, $ano); echo date("d/m/Y", $novaData) . '<br>'; } } geraData(new DateTime('2012-06-28'), 5); Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Maio 31, 2012 a classe DateTime já provê métodos com essa finalidade... A função add recebe como parâmetro um objeto do tipo DateInterval $data = new DateTime( '2012-05-31' ); $data->add( new DateInterval( 'P1D' ) ); echo $data->format( 'd/m/Y' ); for( $i = 1; $i < 5; $i++ ) { $data->add( new DateInterval( 'P1D' ) ); echo $data->format( 'd/m/Y' ); } A saída será: 01/06/201202/06/2012 03/06/2012 04/06/2012 05/06/2012 Não há necessidade de validações. DateTime só gera datas válidas. Somente é um pouco diferente a notação para DateInterval. P - Define o início de um período 1D - Define que o período será de 1 dia. Há o modo procedural também: $date = date_create('2012-05-31'); for( $i = 1; $i < 5; $i++ ) { date_add($date, date_interval_create_from_date_string('1 days')); echo date_format($date, 'd/m/Y' ).'<br />'; } Basta escolher o que quiser. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Junho 1, 2012 Muito obrigado pela ajuda pessoa! Gabriel, Estou desenvolvendo procedural e tentei usar seu exemplo: $date = date_create('2012-05-31'); for( $i = 1; $i < 5; $i++ ) { date_add($date, date_interval_create_from_date_string('1 days')); echo date_format($date, 'd/m/Y' ).'<br />'; } Mas está me retornando um erro: Fatal error: Call to undefined function date_add() O que estou fazendo de errado? Obrigado novamente. Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Junho 1, 2012 se não me engano esse recurso é só para php 5.3. verifique a versão. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Junho 1, 2012 Ambos métodos, DateTime::add e date_add, foram inseridos na versão 5.3 do php. Entretanto, existe o método DateTime::modify, que foi inserido na versão 5.2. O funcionamento seria: $date = new DateTime('2012-06-01'); $date->modify('+1 day'); echo $date->format('Y-m-d'); Compartilhar este post Link para o post Compartilhar em outros sites
pastoremetal 2 Denunciar post Postado Junho 1, 2012 Muito bom, não conhecia esse DateTime, vou dar uma estudada nele também. Compartilhar este post Link para o post Compartilhar em outros sites
Leco RP 6 Denunciar post Postado Junho 2, 2012 Muito obrigado pela ajuda! Resolvido. Compartilhar este post Link para o post Compartilhar em outros sites