Ir para conteúdo

POWERED BY:

Arquivado

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

Good

[Resolvido] Mostrar dias restantes...

Recommended Posts

Bom.. eu fiz um sistema ae de anúncios..

 

aí eu preciso fazer com que mostre os dias restantes, atualizando a cada dia...

 

eu tentei, mas só dava números negativos..

 

  $total = explode("-",somadata($anuncios['datainicio'],$anuncios['dias_restantes']));
  $faltam = ceil((mktime(0,0,0,$total[1],$total[3],$total[0]) - time()) / 86400);

A função somadata, só faz somar a data de ínicio e os dias restantes...

 

A data está no formato padrão (Y-m-d)...

 

 

 

Resumindo...

 

Eu queria mostrar todo os dias, o total de dias restantes a partir de uma data no banco de dados...

 

 

CREATE TABLE `anuncios` (
  `id` bigint(20) NOT NULL auto_increment,
  `datainicio` date,
  `duracao` tinyint(2),
  `dias_restantes` tinyint(2),
)

 

Explicando a tabela:

 

id - nem precisa explicar

datainicio - o nome já diz, é a data em que o anúncio iniciou-se

duracao - é formado em dias, para somar com a datainicio.

dias_restantes - é o valor que será atualizado todo dia..

 

E tipo, o usuário que não é o criador do anuncio apenas verá os dias restantes, ele não atualizará nada na tabela. Apenas atualizará, quando o criador entrar no sistema de usuários cadastrados!

 

 

Obrigado, e espero que esteja bem explicado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom amigo, a primeira coisa que eu fiz foi modificar sua tabela, veja:

 

mysql> create table `anuncios`(
	-> 	`id` mediumint(8) unsigned not null auto_increment,
	-> 	`datainicio` date,
	-> 	`duracao` tinyint(2),
	-> 	primary key(`id`)
	-> );
Query OK, 0 rows affected (0.05 sec)

Removi o campo dias_restantes que será uma coluna dinâmica que calcularemos.

 

Feito isso, adicionei alguns registros para teste:

mysql> select * from `anuncios`;
+----+------------+---------+
| id | datainicio | duracao |
+----+------------+---------+
| 1 | 2009-11-30 | 	20 |
| 2 | 2009-12-01 | 	10 |
| 3 | 2009-12-10 | 	5 |
+----+------------+---------+
3 rows in set (0.00 sec)

Bom, o primeiro passo é somar a datainicio com a duracao para sabermos a data final:

mysql> select `datainicio`, `datainicio` + interval `duracao` day 'datafinal' from `anuncios`;
+------------+------------+
| datainicio | datafinal |
+------------+------------+
| 2009-11-30 | 2009-12-20 |
| 2009-12-01 | 2009-12-11 |
| 2009-12-10 | 2009-12-15 |
+------------+------------+
3 rows in set (0.00 sec)

Com a data final já calculada, vamos ver quantos dias restam:

mysql> select
	-> 	`datainicio`, `datainicio` + interval `duracao` day 'datafinal',date( now() ) 'hoje',
	-> 	datediff( `datainicio` + interval `duracao` day , date( now() ) ) 'dias_restantes'
	-> from `anuncios`;
+------------+------------+------------+----------------+
| datainicio | datafinal | hoje 	| dias_restantes |
+------------+------------+------------+----------------+
| 2009-11-30 | 2009-12-20 | 2009-12-10 | 	10 |
| 2009-12-01 | 2009-12-11 | 2009-12-10 | 	1 |
| 2009-12-10 | 2009-12-15 | 2009-12-10 | 	5 |
+------------+------------+------------+----------------+
3 rows in set (0.00 sec)

A consulta final ficou:

select
`datainicio`,
`datainicio` + interval `duracao` day 'datafinal',
date( now() ) 'hoje',
datediff( `datainicio` + interval `duracao` day , date( now() ) ) 'dias_restantes'
from `anuncios`;

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom.. eu fiz um sistema ae de anúncios..

 

aí eu preciso fazer com que mostre os dias restantes, atualizando a cada dia...

 

eu tentei, mas só dava números negativos..

 

  $total = explode("-",somadata($anuncios['datainicio'],$anuncios['dias_restantes']));
  $faltam = ceil((mktime(0,0,0,$total[1],$total[3],$total[0]) - time()) / 86400);

A função somadata, só faz somar a data de ínicio e os dias restantes...

 

A data está no formato padrão (Y-m-d)...

 

 

 

Resumindo...

 

Eu queria mostrar todo os dias, o total de dias restantes a partir de uma data no banco de dados...

 

 

 

 

Essa parte toda ae eu me referia a PHP!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo. Tentou fazer como o João Batista falou? Depois daquele código, faça a exibição normal da consulta, utilizando mysql_fetch_assoc.

 

Qualquer dúvida, poste novamente

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

AEEEE!!!

 

Eu consegui!

 

Pelo menos mostrous os resultados, mas esta maneira está correta? Fiz em PHP! Ficou meio grande, mas funcionou.. :D

 

 

 

 


function dias_restantes($DataInicial, $DataFinal)
{
  $DataI = explode("-", $DataInicial);
  $DataF = explode("-", $DataFinal);

  $DataInicial2 = mktime(0, 0, 0, $DataI[1], $DataI[0], $DataI[2]);
  $DataFinal2 = mktime(0, 0, 0, $DataF[1], $DataF[0], $DataF[2]);

  return ($DataInicial2 > $DataFinal2) ?
    floor(($DataInicial2 - $DataFinal2)/84600) : floor(($DataFinal2 - $DataInicial2)/84600);
}


$da = explode("-",$casting['datainicio']);
$dat = "$da[2]-$da[1]-$da[0]";

$data = explode("-", $dat);
$somaData = mktime(0,0,0, $data[1], $data[0] + $casting['duracao'] - 1, $data[2]);

$soma = strftime("%d-%m-%Y", $somaData);

  if(dias_restantes($dat, $soma) == 0){
  $finaliza = "hoje";
  } else {
  $finaliza = "em ".dias_restantes($dat, $soma)." dia(s)";
  }


echo $finaliza;

 

Vlw ae pela tentativa.. vou ficar com esse mesmo.. mas se quiserem postar o outro método pra ajudar alguém..

 

 

obrigado!

 

VLW!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas que bacalhoada dos infernos hein...

 

Select id, datediff(datainicio + INTERVAL duracao DAY, date(now()) dias_restantes from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza.. to pensando em usar esse sql, que é menos coisa e eu acho que o meu não vai dar certo..

 

eu queria q vcs verificassem sem vai dar certo o meu feito em php..

 

e o de vcs fica dando erro na consulta..

 

 

João Batista:

Finaliza 2009-12-23

 

 

Giesta:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dias_restantes FROM casting WHERE date(now()) BETWEEN `datainicio` AND date_add(' at line 1

 

JOÃO:

E como eu faço pra consultar?

 

Eu fiz usando array:

 

$anuncio = mysql_fetch_array($anuncios);

$anuncio[1];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido..

 

código final:

 

function dias_restantes($datainicio, $duracao)
{

$da = explode("-",$datainicio);
$dat = "$da[2]-$da[1]-$da[0]";

$data = explode("-", $dat);


/////////////////////
$data_inicial = $datainicio;
$data_final = date("Y-m-d");

$time_inicial = strtotime($data_inicial);
$time_final = strtotime($data_final);

$diferenca = $time_final - $time_inicial; // 19522800 segundos

$dias = (int)floor( $diferenca / (60 * 60 * 24)); // 225 dias
/////////////////////

$somaData = mktime(0,0,0, $data[1], $data[0] + $duracao - $dias, $data[2]);

$soma = strftime("%d-%m-%Y", $somaData);


$DataInicial = $dat;
$DataFinal = $soma;

  $DataI = explode("-", $DataInicial);
  $DataF = explode("-", $DataFinal);

  $DataInicial2 = mktime(0, 0, 0, $DataI[1], $DataI[0], $DataI[2]);
  $DataFinal2 = mktime(0, 0, 0, $DataF[1], $DataF[0], $DataF[2]);

  $resultado = ($DataInicial2 > $DataFinal2) ? floor(($DataInicial2 - $DataFinal2)/84600) : floor(($DataFinal2 - $DataInicial2)/84600);

  if($resultado == 0){
  $finaliza = "hoje";
  } else {
  $finaliza = "em $resultado dia(s)";
  }
  
  return $finaliza;
  
}

 

Se alguém quiser pegar pra melhor ainda mais o código.. está aí pra quem quiser..

 

flw

 

obrigado a vcs! Acho que esse deu certo.. :P

 

se não der, eu venho aqui amanhã.. :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.