Ir para conteúdo

POWERED BY:

Arquivado

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

frequenciavirtual

Hora Sistema de Noticias

Recommended Posts

Eu baixei o supernews sistema de noticias e estou com uma duvida para capturar a hora em que a noticia foi postada.

O codigo que segue abaixo chama-se funcao.php e quando rodo o sistema num servidor de hospedagem windows ele funciona direitinho. Mas quando rodo o sistema em um servidor hospedagem Linux a hora postada da noticia, bem como tambem o dia, mes e ano aparecem sempre zerado. Ocodigo segue abaixo. E já agradeço se alguem puder me ajudar, é a primeira vez que estou usando o Fórum..

 

<?phpfunction conexao_mysql($host,$user,$pass,$db_super_news){global $host, $user, $pass, $db_super_news;//verifica se as variaveis (host,user,pass,db_super_news) estao setadasif(isset($host) and isset($user) and isset($pass) and isset($db_super_news)){//realiza a conexao com o banco de dados$conexao = @mysql_connect($host, $user, $pass);//checa se a conexao foi bem sucedidaif(!$conexao){print("<font color='#FF0000'>Error!! Impossível conectar-se ao MYSQL.</font>");exit();}//verifica e seleciona o banco de dadosif(!@mysql_select_db($db_super_news, $conexao)){print("<font color='#FF0000'>Error!! Impossível selecionar o banco de dados $db_super_news"  . mysql_error() . '</font>');exit();}}else{print("<font color='#FF0000'>Error!! Alguma(s) da(s) variáveis (host, user, pass, db_super_news), não está atribuída!!</font>");}}//Formata a data do banco de dados MYSQL (ex.: 2004-02-08 22:56:30) para uma mais//convencional (ex.: 08 de Fevereiro de 2004 - 22h 56min).function formatData($data){$dia = substr($data, 8, 2);$mes = substr($data, 5, 2);switch ($mes) {  case 01:	$newmes = "Jan";	break;  case 02:	$newmes = "Fev";	break;  case 03:	$newmes = "Mar";	break;  case 04:	$newmes = "Abr";	break;  case 05:	$newmes = "Mai";	break;  case 06:	$newmes = "Jun";	break;  case 07:	$newmes = "Jul";	break;  case 08:	$newmes = "Ago";	break;  case 09:	$newmes = "Set";	break;  case 10:	$newmes = "Out";	break;  case 11:	$newmes = "Nov";	break;  case 12:	$newmes = "Dez";	break;}$ano = substr($data, 0, 4);$novadata = $dia . ' de ' . $newmes . ' de ' . $ano;$novahora = $novadata . ' - ' . substr($data, 11, 2) . 'h' . substr($data, 14, 2) . 'min';$datahora = $novahora;return $datahora;}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Beraldo pelo interesse em me auxiliar.Procurei informações sobre strftime(), mas confesso que nao entendi.Se voce fosse modificar esse script que eu postei o que você modificaria?Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo simples:

 

<?php
$dia = 14;
$mes = 7;
$ano = 2007;
$hora = 20;
$min = 10;
$seg = 42;
$timestamp = mktime($hora, $min, $seg, $mes, $dia, $ano);
setlocale(LC_TIME, "pt_br", "ptb", "pt-br", "portuguese-brazil", "brazil");
echo strftime("%A, %d de %B de %Y. %H:%M:%S", $timestamp);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei o script que voce me passou, e ele realmente funciona. So que captura a o dia, a hora, o mes e o ano pre definidos.Mas o que eu preciso é capturar o dia, a hora, o mes e o ano em que uma noticia foi postada em sistema de noticias.Por exemplo este poste esta sendo enviado 14/07/2007 às 20:50hsquando postar em outra data outra data sera mostrada.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em que formaro está a data? Se for YYYY-MM-DD HH:MM::SS, faça assim:

 

echo strftime("Formatação desejada", strtotime("2007-07-14 20:00:00"));
Coloquei uma data específica ali só para exemplificar. É possível inserir uma variável no argumento de strtotime().

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei e nao consegui continua aparecendo a data do dia 14 de julho.O formato da data quando envio a noticia para o servidor é o seguinte $data = date("Ymd H:i:s");So que nao consigo recuperar esta data.Só aparece a data do 14 de julho de 2007.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o codigo que fiz, mas ele agora esta capturando a hora local e nao a hora que postei a noticia.Tentei varias maneiras e esta é uma das unicas que aparecem a data mais proxima ou seja mostra a hora local. As outras maneiras que tentei mostra uma data de 1969 e mostra a hora zerada.Este codigo abaixo mostra a hora local.Obrigado.

<?phpfunction conexao_mysql($host,$user,$pass,$db_super_news){global $host, $user, $pass, $db_super_news;//verifica se as variaveis (host,user,pass,db_super_news) estao setadasif(isset($host) and isset($user) and isset($pass) and isset($db_super_news)){//realiza a conexao com o banco de dados$conexao = @mysql_connect($host, $user, $pass);//checa se a conexao foi bem sucedidaif(!$conexao){print("<font color='#FF0000'>Error!! Impossível conectar-se ao MYSQL.</font>");exit();}//verifica e seleciona o banco de dadosif(!@mysql_select_db($db_super_news, $conexao)){print("<font color='#FF0000'>Error!! Impossível selecionar o banco de dados $db_super_news"  . mysql_error() . '</font>');exit();}}else{print("<font color='#FF0000'>Error!! Alguma(s) da(s) variáveis (host, user, pass, db_super_news), não está atribuída!!</font>");}}//Formata a data do banco de dados MYSQL (ex.: 2004-02-08 22:56:30) para uma mais//convencional (ex.: 08 de Fevereiro de 2004 - 22h 56min).function formatData($data){$data = date("Ymd H:i:s");setlocale(LC_TIME, "pt_BR");echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime("$data"));}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a hora da notícia vem do banco de dados, certo? Você tem que buscar a data no banco. Esse código é o mesmo do seu primeiro post. Eu quero ver como você está fazendo para resgatar a data da notícia. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aonde coloquei em negrito é onde faz a busca no banco da data e da hora e atraves desta função formatdata onde requere o arquivo funcao.php que é onde esta o primeiro o codigo que postei.

 


if(!$resultado){

die("Erro na solicitação de query _linenums:0'><?phprequire("conexao.inc.php"); //arquivo incluido que contem todas as variaveis necessarias para conexao com o MYSQLrequire("funcao.php"); //arquivo que contem algumas funcoes basicasconexao_mysql($host,$user,$pass,$db_super_news); //funcao para conexao com o MYSQLif(!isset($noticia)){?><?php//Mostra todas as notícias inseridas no banco de dados e organiza em ordem//decrescente com relação a hora de criação com um limite de 5 noticias por consulta$resultado = mysql_query('SELECT ID, titulo, data FROM ultimas ORDER BY ID DESC LIMIT 0, 5');if(!$resultado){die("Erro na solicitação de query: " . mysql_error() . '<br>');}//Verifica se há alguma noticia amazenada no banco de dadosif(mysql_num_rows($resultado) == 0){?><font face="Verdana, Arial, Helvetica, sans-serif" color="#FF0000" size="1">Atenção! Não há notícias no banco de dados.</font><br><?php} else {//Realiza um loop atrás das informações inseridas na tabela supernewswhile($row = mysql_fetch_array($resultado)){$id = $row['ID'];$titulo = $row['titulo'];$data = $row['data'];<strong class='bbc'>print('<p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><b>' . formatData($data) . '</b><img src="time.gif" width="15" height="14" alt="" border=0><br><a class="titulo" href="?noticia=' . $id . '&titulo=' . $titulo . '">' . htmlentities($titulo) . '</a></font></p>');</strong>}}//Busca pela noticia com referencia ao $id selecionado}elseif(isset($noticia)){$id = $noticia;$resultado = mysql_query("SELECT * FROM ultimas WHERE ID=$id");if(!$resultado){die("Impossível visualizar esta notícia: " . mysql_error() . '<br>');}//Realiza um loop atrás das informações inseridas na tabela supernewswhile($row = mysql_fetch_array($resultado)){$diretorio = $row['diretorio'];$largura = $row['largura'];$altura = $row['altura'];$titulo = $row['titulo'];$conteudo = $row['conteudo'];$data = $row['data'];?><table width="100%" align="center" border="0" cellpadding="0" cellspacing="0"> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000000" size="2"><b><?php print(htmlentities($titulo)); ?></b></font><br> </td> </tr> <tr> <td> <strong class='bbc'><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000000" size="1"><b><?php print(formatData($data)); ?></b></font><br></strong> <hr color="#CCCCCC" width="50%" align="left"> </td> </tr> <tr> <td> <?php if($diretorio == ""){ //se o diretorio for igual a vazia isso significa que é uma noticia sem imagem e mostra so a noticia ?> <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000000" size="2"><?php print(nl2br(htmlentities($conteudo))); ?></font></p> <?php } else { //caso contrario mostra a noticia com a imagem ?> <img src="admin/<?= $diretorio; ?>" width="<?= $largura; ?>" height="<?= $altura; ?>" align="left" border="1"><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000000" size="2"><?php print(nl2br(htmlentities($conteudo))); ?></font></p> <?php } ?> </td> </tr> <tr> <td><hr color="#CCCCCC"></td> </tr> <tr> <td><div align="center"><a class="links" href="java script:self.print()" onMouseOver="window.status='Imprimir'; return true">Imprimir</a> | <a class="links" href="index.php" target="_self">Painel de Notícias</a> | <a class="links" href="#top">Topo</a></div></td> </tr> <tr> <td><hr color="#000000"></td> </tr></table><?php}?><br><font size="1" face="Verdana, Arial, Helvetica, sans-serif">+ Notícias...</font><br><hr width="100%" color="#CCCCCC"><?php//aproveita a conexao aberta para mostra as noticias diferentes da que a pessoa está lendo$resultado1 = mysql_query("SELECT * FROM ultimas WHERE ID<>$id ORDER BY data DESC LIMIT 0, 5");if(!$resultado1){die("Impossível visualizar esta notícia: " . mysql_error() . '<br>');}if(mysql_num_rows($resultado1) == 0){?><font face="Verdana, Arial, Helvetica, sans-serif" color="#FF0000" size="1">Adicione mais notícias.</font><br><?php} else {//Realiza um loop atrás das noticias inseridas na tabela supernewswhile($row = mysql_fetch_array($resultado1)){$id = $row['ID'];$titulo = $row['titulo'];print('<font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000"><a class="Inkdois" href="?noticia=' . $id . '&titulo=' . $titulo . '">» ' . htmlentities($titulo) . '</a></font><br>');}}}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops... agora que percebi: o erro está na função mesmo. Você deve retirar esta linha do código de formarData():

$data = date("Ymd H:i:s");

Essa linha redefine o valor de $data sempre para a data corrente. ;)

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retirei a linha e modifiquei o codigo para o seguinte

 

function formatData($data)

{

setlocale(LC_TIME, "pt_BR");

echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime("2007-07-14 20:00:00"));

}

 

e eis o que aparece

 

sábado, 14 de julho de 2007. 20:00:00

Em carta, Roriz renuncia e critica "desapreço" de colegas

Deletar | Editar

 

 

sábado, 14 de julho de 2007. 20:00:00

Idosa morre ao ser atropelada por ônibus no Rio

Deletar | Editar

 

 

sábado, 14 de julho de 2007. 20:00:00

Dia Internacional do Cooperativismo

Deletar | Editar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei assim:

 

function formatData()

{

setlocale(LC_TIME, "pt_BR");

echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime("$data"));

}

 

 

e o resultado foi esse:

 

quarta, 31 de dezembro de 1969. 21:00:00

Dia Internacional do Cooperativismo

Deletar | Editar

 

Depois tentei assim:

 

function formatData($data)

{

setlocale(LC_TIME, "pt_BR");

echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime("$data"));

}

 

e o resultado foi esse:

 

terça, 30 de novembro de 1999. 00:00:00

Dia Internacional do Cooperativismo

Deletar | Editar

Compartilhar este post


Link para o post
Compartilhar em outros sites

No banco de dados campo édata DATETIME NOT NULL,A minha tabela completa éCREATE TABLE ultimas( ID int(5) unsigned NOT NULL AUTO_INCREMENT, diretorio TEXT, largura TEXT, altura TEXT, titulo TEXT NOT NULL, conteudo TEXT NOT NULL, data DATETIME NOT NULL, PRIMARY KEY (ID) );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não vai adiantar, mas retire as aspas de $data, deixando assim:

 

echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime($data));

Dê um echo na data vinda do BD e veja se ela está chegando corretamente (YYYY-MM-DD HH:MM:SS).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continuei tentando e continua aparecendo o seguinte:

 

terça, 30 de novembro de 1999. 00:00:00

 

Esta é a data que aparece na maioria das vezes.

Quando faço no servidor windows o primero codigo que postei neste topico, funciona direito so qu no linux continuo sem solução.

 

Nao sei onde pode estar o erro.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema deve ser na data vinda do BD. Testei este código e aqui funciona perfeitamente:

 

function formatData($data)
{
	setlocale(LC_TIME, "pt_br", "ptb", "pt-br", "portuguese-brazil", "brazil");
	echo strftime("%A, %d de %B de %Y. %H:%M:%S", strtotime($data));
}

formatData("2007-07-16");

DÊ um echo nas variáveis que vêm do BD e vejam se elas estão corretas.

Verifique também se os campos não estão vazios. ;)

 

Abraços,

Beraldo

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.