Ir para conteúdo

POWERED BY:

Arquivado

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

felipebmfaria

[Resolvido] Cadastro de datas com Intervalo

Recommended Posts

Boa tarde!!

 

Estou montando um cadastro de missas.

 

Estou com problemas em 3 campos: data inicio, data final e dias.

 

O campo dias representa a repetição

 

Exemplo 1: quero cadastrar uma missa nas 4 sextas-feiras do mês de setembro, entao preencho com:

 

data inicio=03/09/2010
data final=24/09/2010
dias=sexta-feira

 

Exemplo 2: quero cadastrar 7 dias na sequencia, entao preencho com:

 

data inicio=27/09/2010
data final=04/10/2010
dias=varios

Alguem tem uma ideia de como fazer este cadastro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez seja mais convniente você declara apenas o 1º dia e calcular o último com base num "pulo" de dias e na quantidade total.

 

Ex.:

inicio <- 01/01/2010
intervalo <- 7
quantidade <- 3
Calculando, retornaria:

"01/01/2010"
"08/01/2010"
"15/01/2010"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na data final, ou 'intervalo' como você chamou, eu pegaria apenas a parte do "dia"?

por exemplo: 07/08/2010, eu pegaria somente o "07"...

é uma ideia, mas e se o intervalo for de mais de 30 dias, exemplo:

data inicio = 01/08/2010
data final = 05/09/2010
como faço?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O intervalo que eu coloquei ali, seria de quantos em quantos dias haverá o evento (no caso, de 7 em 7).

 

Tendo esses dados, o próprio código processa e te devolve os dias.

 

Conta com data não é meu forte, mas não deve ser complicado e deve ter alguma coisa na internet.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já procurei na net, mas nao encontrei nada tao especifico...

 

Realmente preciso de uma data inicial e uma data final e estou pensando em como calcular este intervalo...

 

pensei assim(usando strtotime):

$dif = $data inicio - $data fim
$dif * ( alg coisa para achar o numero de dias)   

realmente estou meio confuso, precisando de ajuda. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguindo a sua lógica, usando essa conta

dataInicial - dataFinal
Você teria a diferença entre as duas datas e, num outro campo, o seu "intervalo" entre uma e outra.

 

Como você acharia as datas aí no meio?

 

Ao meu ver fica meio complicado.

 

EDIT: Consegui!

 

Teste isso, e veja se ajuda:

<?php

$data = '2010-01-01';
$data = explode('-',$data);

//evento de 7 em 7 dias
$intervaloDias = 7;

//quantos eventos ocorrerão nessa frequência
$quantidade = 6;

$datas = array();

for($i = 0; $i<$quantidade; $i++){
  $timestamp = mktime(0,0,0,$data[1],$data[2]+($intervaloDias*$i),$data[0]); //somar os dias, $intervaloDias * $i
  $datas[] = date('d/m/Y',$timestamp);
}
echo '<pre>';
var_dump($datas);
echo '</pre>';

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi muito bem como você quer pegar as datas, tendo a primeira e a última.

 

Não vou poder ver esse código agora pois estou atarefado. Assim que puder tento alguma coisa ;)

 

Obs.: A idéia principal de somar as datas está aí, vá tentando alguma coisa enquanto isso ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dois dias depois, eis o código. (mas eu ainda prefiro do meu jeito xD).

 

Deixei os "echo" pra ver o debug.

<h1>Primeira e Última data</h1>
<?php

$dataInicio = '2010-09-01';
$dataFim = '2010-09-30';

$dias = array("Todos","Domingos","Segundas-Feiras","Terças-Feiras","Quartas-Feiras","Quintas-Feiras","Sextas-Feiras","Sábados");
$diaDaSemana = 5; 

$dataInicioTimestamp = strtotime($dataInicio); //conversão necessária para a diferença de dias
$dataFimTimestamp = strtotime($dataFim); //conversão necessária para a diferença de dias
$diasDeDiferenca = floor(($dataFimTimestamp - $dataInicioTimestamp)/86400); //60*60*24=86400

echo '<p><strong>Data Inicial:</strong> '.$dataInicio.'</p>';
echo '<p><strong>Data Final:</strong> '.$dataFim.'</p>';
echo '<p><strong>Dias de evento:</strong> '.$dias[$diaDaSemana].'</p>';
echo '<p><strong>Dias de diferença:</strong> '.$diasDeDiferenca.'</p>';

list($anoInicio, $mesInicio, $diaInicio) = explode('-',$dataInicio);

$diasOk = array();

for($i=0;$i<=$diasDeDiferenca;$i++){
  $dataComparacao = mktime(0,0,0,$mesInicio,$diaInicio+$i,$anoInicio);
  
  if($diaDaSemana == 0){
    $diasOk[] = date('d/m/Y',$dataComparacao);
  }else{
    if($dias[date('w',$dataComparacao)+1] == $dias[$diaDaSemana]){
      $diasOk[] = date('d/m/Y',$dataComparacao);
    }
  }
}

echo '<p><strong>Resultado:</strong> '.implode(', ',$diasOk).'</p>';
?>
Confere ae =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, parece funcionar perfeitamente! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Vou testar e posto o resultado.

 

Brigadão!!

 

--------------- Ponto de Mesclagem ---------------

 

Cara, deu certo!!! 100% http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Muito obrigado pela ajuda aí...

 

abçs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Malz aí por voltar no tópico, mas

 

se eu quiser pegar os valores do array e gravar em variaveis, como faço?

 

Exemplo:

$data1=$array[0]
$data2=$array[1]
$data3=$array[2]

Tentei assim mas nao deu certo:

foreach ($diasOk as $k=>$v) {
echo $k." - ".$v;
} 

vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for para manter o controle de evento/datas, na tabela do evento, declare um ID pro evento.

 

Numa segunda tabela, crie as datas e a que evento elas pertencem (conceito de chave estrangeira).

 

Desse jeito dá pra ter eventos com 1 dia e também de 1 mês inteiro.

 

Fazendo assim, no final do script, é só pegar o $diasOk(na íntegra) e inserir na segunda tabela as datas, relacionadas com a id do evento.

 

Tabela Evento:
ID, Nome, Dia_Inicio, Dia_Termino

Tabela Evento_Datas
ID, ID_Evento, Data

é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com voce, do jeito que você citou é bem mais pratico, porem este sisteminha de cadastro de missas já existe em outra linguagem e me foi pedido que fizesse um para rodar em php, mantendo a modelagem, funcionalidade e aparencia do outro, por isso tenho a preocupacao em seguir o mesmo raciocinio.

 

Portanto preciso de criar um registro para cada data, exemplo:

$data 1 = '2010-09-20';
$data 2 = '2010-09-19';
INSERT INTO (data) VALUES ($data1);
INSERT INTO (data) VALUES ($data2);
e assim vai

 

eu precisava pegar as datas do array e atribuir a uma determinada variavel.

$data1 = array na posicao 0
$data2 = array na posicao 1
$data3 = array na posicao 2
e assim vai
mas nao estou conseguindo pegar os valores do array e colocar em variaveis.

 

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desnecessário cara... insere logo a posição do array

 

INSERT INTO (data) VALUES ($array[0]);
....

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou o foreach com o mysql_query dentro?

foreach($diasOk as $data){
  mysql_query("INSERT INTO data VALUES '$data'");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

o script nao esta 'pegando' a data_final com exatidão.

 

Exemplo:

Data Inicial: 2010-10-03

Data Final: 2010-11-07

Dias de evento: Domingos

 

Data1: 03/10/2010

Data2: 10/10/2010

Data3: 17/10/2010

Data4: 24/10/2010

Data5: 31/10/2010

 

faltou mostrar a data_final que seria 07-11-2010

 

tentei alterar o código para pegar a data final mas nao deu certo. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Grato.

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.