Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leco RP

[Resolvido] Como criar uma sequência de datas a partir de quantia

Recommended Posts

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

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

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

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/2012

02/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

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

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

×

Informação importante

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