Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Willian Faria

Manipulação de Datas

Mensagens Recomendadas

Willian Faria

Prezados:

Em relação a função mktime:

Suponha que utilizemos esta função da seguinte forma:

$teste = date('d/m/Y', mktime(0, 0, 0, $mes, $dia, $ano));

Atribuindo a variavel $ano o ano 2013, a variavel $teste conterá o valor: 31/03/2013

Porém se é passado a variavel $ano o ano igual ou maior que 2038 a variavel $teste esta recebendo o valor: 01/01/1970

Sendo assim que a função mktime não manipula datas inferior a 1970 e superior a 2037.

Estou tendo trabalar com esta linha de comando para subtrair um periodo de dias de uma data obtida pelo algoritmo de Delambre que tem como finalidade retornar a data da Pascoa e assim com base nesta infomração obter a data da terça-feira de carnaval que é 47 dias anteriores a data da pascoa.

Então como faço para resolver este problema? Que função substitui a função mktime ou que outra alternativa pode ser usada?

Obs.: Há um bug conhecido com easter_date () que pode retornar datas incorretas de alguns anos:

Ele está aparentemente relacionado com as configurações de fuso horário. Segundo o site: www.php.net

Assim como houve a previsão de problemas na passagem do milénio (o bug do milénio), já se espera um problema para o ano de 2038 desta vez associado à data no formato marca temporal UNIX.[2]

http://pt.wikipedia.org/wiki/Era_Unix#Problemas

Willian

Editado por Willian Faria

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Existem várias alternativas :

  • Fazer uma função própria para lidar com as datas;
  • Usar ADODB (http://phplens.com/phpeverywhere/adodb_date_library);
  • Actualizar o PHP para a versão 64 bits (não resolve por completo mas dá uma margem maior);
  • Usar o objecto DateTime em vez da função mktime;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Icepick.pt

Aqui há uns tempos atrás escrevi uma função em Javascript para fazer o que tu queres. Talvez consigas resolver o poblema com ela. Só tens que chamar a função, indicando os parametros que queres utilizar. No teu caso acho que será qualquer coisa como:

calculaData('31-03-2013','-47','0','0');

// esta função devolve uma string no formato dd-mm-aaaa que corresponde a:
//    data de inicio + diferença = data de resultado
function calculaData(inicio, diferencaDias,  diferencaMeses,  diferencaAnos){
var dd=inicio.substr(0,2)*1;
var mm=inicio.substr(3,2)*1-1;//janeiro é o 0!
var yyyy=inicio.substr(6,4)*1;

var resultado = new Date();
resultado.setFullYear( (yyyy + diferencaAnos) , (mm + diferencaMeses),(dd + diferencaDias) );
var dd = resultado.getDate();
var mm = resultado.getMonth()+1; //janeiro é o 0!
var yyyy = resultado.getFullYear();
if(dd<10){dd='0'+dd};
if(mm<10){mm='0'+mm};
var resultado = dd + '-' + mm + '-' + yyyy;
return resultado;

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Aqui há uns tempos atrás escrevi uma função em Javascript para fazer o que tu queres.

porque estás a responder com javascript numa secção de PHP, onde a pergunta era de PHP onde a pessoa refere que tem problemas com criação de uma texto em PHP com uma data criada e manipulada em PHP ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Icepick.pt

Porque não sei se a data é mesmo criada em PHP ou se é originária do utilizador.

Porque nem sempre a solução que procuramos acaba por se provar a melhor.

Porque o William perguntou ' que outra alternativa pode ser usada'.

Porque tenho o hábito de manter uma mente aberta na resolução de problemas, em vez de estreitar as possibilidades sem uma justificação razoável.

Porque provávelmente a função até pode vir a servir no futuro para outra pessoa qualquer com o mesmo problema ou outro semelhante, mesmo que não sirva para o William.

Porque não tenho a possibilidade de mudar o tópico para a secção de Javascript, nem acho que ela pertença lá.

Em todo o caso, podes sempre remover a resposta se achares que é desapropriada.

Editado por Icepick.pt

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.