Jump to content


Photo

Gerar Datas De Um Intervalo


  • Faça o login para participar
1 reply to this topic

#1 brilhantetk

brilhantetk

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Masculino
  • Localidade:São Leopoldo - RS - Brasil
  • Interesses:Desenvolvimento PHP / MySql

Posted 09/09/2012, 23:19

Pessoal,

preciso popular uma tabela com datas existentes em um intervalo de datas...
Exemplo:
Data Inicial: 01/01/2012
Data Final: 12/01/2012

O script deve inserir no banco o seguinte resultado:
01/01/2012
02/01/2012
03/01/2012
04/01/2012
05/01/2012
06/01/2012
07/01/2012
08/01/2012
09/01/2012
10/01/2012
11/01/2012
12/01/2012

Mas só pode inserir se ainda não existe esta data já gravada.

Alguém pode me ajudar?

PS: Tabela = datas Campo = data
Rafael Coimbra Brilhante
Desenvolvedor PHP
e-mail/MSN: brilhantetk@gmail.com
Fone: (51) 8411 5995
São Leopoldo - RS - Brasil

#2 Tugu

Tugu

    <! Fernando Tugu !>

  • Usuários
  • 381 posts
  • Sexo:Masculino
  • Localidade:São Bernardo do Campo - SP
  • Interesses:Ajudar pessoas que tenham dificuldades em minhas especializações... e espero que me ajudem quando ficar muito xxxxxx meus trampos...

Posted 29/05/2013, 11:37

Um "pouco" atrasado, mas cheguei nesse tópico através do Google hoje, e acabei achando a solução e por gostar do fórum, e para outras pessoas que caírem no tópico... aqui vai minha solução

        $dtIni = 'xxxx-xx-xx';
        $dtFim= 'xxxx-xx-xx';
	$meses = diferencaData($dtIni,$dtFim,'M');//no caso caluculei a diferença de meses
	for($i=0;$i<$meses;$i++){//fiz um loop para os meses do periodo
		echo strtotime("$dtIni+$i month");//e fui adicionando meses de acordo com o contador i, na data incio
        }
         /* Referências validas para calculo de data php: mais referencias consulte o manual na função strtotime
		//adiciona um dia
		echo strtotime("+1 day");
		//adiciona uma semana
		echo strtotime("+1 week");
		//adiciona um mês
		echo strtotime("+1 month");
		//adiciona um ano
		echo strtotime("+1 year");
	*/
 

function diferencaData($d1, $d2, $type='D', $sep='-')
{
	$d1 = explode($sep, $d1);
	$d2 = explode($sep, $d2);
	switch ($type){
		case 'A':
			$X = 31536000;
			break;
		case 'M':
			$X = 2592000;
			break;
		case 'D':
			$X = 86400;
			break;
		case 'H':
			$X = 3600;
			break;
		case 'MI':
			$X = 60;
			break;
		default:
			$X = 1;
			break;
	 }
	return floor( ( ( mktime(0, 0, 0, $d2[1], $d2[2], $d2[0]) - mktime(0, 0, 0, $d1[1], $d1[2], $d1[0] ) ) / $X ) );
}



Edição feita por: Tugu, 29/05/2013, 11:38.

<span style='font-size:10pt;line-height:100%'>Fernando Tugu</span>
Meu Lema: "O ser Humano não é nada sem seus sonhos . . . então vá pra cama dormir ! ! !"




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq