Ir para conteúdo

POWERED BY:

Arquivado

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

cdfree

Gerar array com datas

Recommended Posts

Como posso gerar uma array de datas

$datainicial = '23-07-2014';
$datafinal = '23-01-2015';
$datas = ('23-07-2014','23-08-2014','23-09-2014',.....,'23-10-2014','23-01-2014');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem para que você quer, mas segue

$datainicial = '23-07-2014'; 
$datafinal = '23-01-2015'; 

$di = array(); 
$df = array(); 

array_push($di, $datainicial);
array_push($df, $datafinal);

$datas = array_merge($di, $df);

print_r($datas);

Para laços

$di = $df = array(); 
while (...) {

	array_push($di, $datainicial);
	array_push($df, $datafinal);

}

$datas = array_merge($di, $df);

http://php.net/manual/pt_BR/function.array-merge.php

http://php.net/manual/pt_BR/function.array-combine.php

http://php.net/manual/pt_BR/function.array-push.php

 

Não me lembro da função que remove o indice, da uma pesquisada no :google:

 

ou http://php.net/manual/pt_BR/ref.array.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma função que já me ajudou muito:

function datasArray($data_inicio, $data_fim = null)
{
	$data_fim = !$data_fim ? date('d-m-Y') : $data_fim;

    list($dia, $mes, $ano) = explode( "-",$data_inicio);

	$dataInicial = getdate(strtotime($data_inicio));
	$dataFinal = getdate(strtotime($data_fim));
	$dif = ( ($dataFinal[0] - $dataInicial[0]) / 86400 );
	$meses = round($dif/30)+1;  // +1 serve para adiconar a data fim no array
 
	for($x = 0; $x < $meses; $x++){
		$datas[] =  date("d-m-Y",strtotime("+".$x." month",mktime(0, 0, 0,$mes,$dia,$ano)));
	}

  	return $datas;
}

uso/saida:


$array = datasArray('23-07-2014', '23-08-2015');
print_r($array);
Array
(
    [0] => 23-07-2014
    [1] => 23-08-2014
    [2] => 23-09-2014
    [3] => 23-10-2014
    [4] => 23-11-2014
    [5] => 23-12-2014
    [6] => 23-01-2015
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não tinha entendido e o dochipis pegou, eu uso uma função parecida com a decima, mas ela tem uns recursos a mais, como passar o tipo de formato e se é o intervalo é por dia, mes ou até mesmo ano, e mais limpa.

 

Como agora já almocei entendi :)

 

Segue minha contribuição.

function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' ) { 

    $dates = array();
    $current = strtotime($first);
    $last = strtotime($last);

    while( $current <= $last ) { 

        $dates[] = date($format, $current);
        $current = strtotime($step, $current);
    }

    return $dates;
}

Uso

$first = '2014-02-28'; 
$last  = '2018-01-01';

print_r(dateRange($first, $last, '+1 month', 'Y-m-d' ));

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP tem isso pronto

$datas = new DatePeriod(new DateTime('2014-01-20'), new DateInterval('P30D'), new DateTime('2014-12-20'));

foreach($datas as $data) {
	echo $data->format('d/m/Y'),'<br>';
}


no caso do nosso amigo ai, que parece que quer gerar datas de pagamento (10 parcelas no exemplo abaixo)

$datas = new DatePeriod(new DateTime('2014-01-20'), new DateInterval('P1M'), 10);

foreach($datas as $data) {
	echo $data->format('d/m/Y'),'<br>';
}

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.