rogerss_7 0 Denunciar post Postado Setembro 15, 2008 Olá, Já como não obtive respostas que resolvessem o meu problema neste tópico, resolvi consultar suas idéias. Vejamos: Tenho um sistema que trabalha com edições. A cada dia é criada uma nova edição e colocada uma data que ela será executada. Dentro desse sistema, são incorporados outros conteúdos, inclusive o "tal" sistema de cardápios. O sistema de cardápios que existe hoje é feito diariamente, sendo só colocado o cardápio do dia. Analisando isso, resolvi fazer um que, ao invés de colocar dia após dia, colocasse o da semana completo, no meu caso de segunda à sábado. Então criei uma parte onde tu cadastra: o nome do dia da semana (quarta-feira) a data deste dia (2008-09-17 -> que é quarta-feira) e o próprio cardápio deste diaA pessoa grava a segunda, terça quarta etc.., ou seja, a semana completa. A parte onde tu cadastra essas informações está 100%. Só que agora a exibição dos dados na própria execução da edição é que é o "bicho". Pensei que quando passasse a data da edição, conseguiria fazer isso de modo fácil, mas estou vendo que não é bem assim. Vou dar um exemplo: Hoje é 15-09-2008, segunda-feira. Supondo que hoje eu cadastre a edição 01 e a data de hoje mesmo. Logo hoje, vou cadastrar o cardápio de toda a semana, de segunda (hoje) até sábado (20-09-2008). Amanhã vou cadastrar a edição 02 e a data de amanhã. Não preciso cadastrar o cardápio, porque ele já está cadastrado, a semana toda, lembra? Faço isso até sábado. Lógico que quando chegar sábado vou ter a edição 06 (um cardápio permanece em 6 edições consecutivas), mas isso não tem nada haver, eu acho, hehe. Tenho estes cardápios nestas 6 edições, como eu faço pra mantê-los dessa forma, ou seja, de acordo com a edição passada, ele pegar a semana completa (seg à sáb)? O que eu posso fazer pra conseguir o resultado desejado? Como vocês fariam? Obs.: Perdoem o texto longo. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Setembro 15, 2008 Olha só, um Geek indiano chamado haisabari fez uma pequena classe para PHP que retorna o primeiro e o último dia da semana atual, você poderia usar essa classe para conseguir o valor mínimo e máximo para alimentar a função BETWEEN da SQL que eu citei naquele outro tópico que você citou acima. http://www.phpclasses.org/browse/package/2600.html Nota1: É preciso ser cadastrado no PHPClasses para fazer o download. Nota2: Devido a um bug no Internet Explorer, você só conseguirá baixar sem problemas com o Firefox. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 15, 2008 Sinceramente, uma classe somente para isso é besteira. Uma função simples já resolve. Use date(). Se não me falha a memória, a opção "t" retorna o dia da semana (em numeral). Basta verificar qual é esse número. Se for zero, é domingo. Se for 6, sábado. Se não for nenhum deles, você pode ir somando ou subtraindo 3600*24 minutos (o que corresponde a um dia) à data, até obter zero ou seis, conforme desejar. Use um loop para isso. Também dá para usar mktime(), mas você teria que dividir a data pelo "-". Se usar soma de segundos, pode dar um strtotime() na data. Entendeu? Não olhei o código da classe sugerida pelo mangakah, mas deve ser algo semelhante. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Setembro 16, 2008 com o parâmetro 'w' na funcão date você pega o dia da semana, 0 = domingo até 6 = sabado. Vamo supor que o usuário escolheu 16-08-2008, a funcao te retornar 2 (terça-feira). Para achar o primeiro dia da semana é só jogar a data que ele digitou (16-08-2008) - 2, assim você chega no 14-08-2008 (Domingo). E para pegar o ultimo dia da semana, joga a data que ele digitou + 4, vai ficar 20-08-2008 (Sabado). Dai é só jogar no MySQL Att, Guilherme Oenning. Compartilhar este post Link para o post Compartilhar em outros sites
rogerss_7 0 Denunciar post Postado Setembro 16, 2008 Gente, Acho que devo isso à vocês, muito obrigado mesmo pelas ajudas. Vocês, como sempre, foram realmente sábios e nota 10. Consegui resolver meu problema, talvez de um jeito mais "grosseiro", mas está resolvido, testado e aprovado. Segue abaixo minha solução. // Listagem do cardápio // Começa pegando a data edição passada // Pego a data, vejo o número ( date(w) ) que dia da semana é. // 0 - domingo / sunday // 1 - segunda / monday // 2 - terça / tuesday // 3 - quarta / wednesday // 4 - quinta / thursday // 5 - sexta / friday // 6 - sábado / saturday // A intenção é fazer uma condição between (entre) a segunda-feira e o sábado, que são o início e o fim do cardápio. $PegaData = date('w', strtotime($pega_data_edicao)); $SeparaData = explode('-', $pega_data_edicao); $AnoData = $SeparaData[0]; $MesData = $SeparaData[1]; $DiaData = $SeparaData[2]; if ($PegaData == 1) { // Segunda $Segunda = $pega_data_edicao; $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+5, date($AnoData))); } else { if ($PegaData == 2) { // Terça $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-1, date($AnoData))); $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+4, date($AnoData))); } else { if ($PegaData == 3) { // Quarta $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-2, date($AnoData))); $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+3, date($AnoData))); } else { if ($PegaData == 4) { // Quinta $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-3, date($AnoData))); $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+2, date($AnoData))); } else { if ($PegaData == 5) { // Sexta $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-4, date($AnoData))); $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+1, date($AnoData))); } else { if ($PegaData == 6) { // Sábado $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-5, date($AnoData))); $Sabado = $pega_data_edicao; } } } } } } $pedido_cardapio_semana = mysql_query("select dia, cardapio from tb_cardapio_semana where data between '$Segunda' and '$Sabado' limit 0,6"); while($c = mysql_fetch_array($pedido_cardapio_semana)) { echo " <div class='cardapio_dia'> <b>$c[dia]</b> <br><br> $c[cardapio] </div>"; } Se tiverem algo pra discutir, por favor faça-o, quero muito melhor minhas coisas. Até o então, o TÓPICO ESTÁ RESOLVIDO. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Setembro 16, 2008 Isso aí, mas esse monte de IF fica feio. Você terá o mesmo resultado se trocar todos os ifs por: $Segunda = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)-(1-$PegaData), date($AnoData))); $Sabado = date('Y-m-d', mktime(0, 0, 0, date($MesData), date($DiaData)+(6-$PegaData), date($AnoData))); Faça um teste, fiz de cabeça agora! Vlw! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Att, Guilherme Oenning. Compartilhar este post Link para o post Compartilhar em outros sites