Preciso de colocar algumas datas na função time(), as vezes é uma data que ainda virá, ou uma data passada!
Não achei nenhuma função (não procurei muito) que faça tal... então decidi criar uma, porque não parece muito complicado...
Dai criei 2 funções, a primeira para ver quantos ano bissextos teve desde que foi começado a contagem em segundos da função, para eu poder adicionar esses dias depois na data... então vamos lá, esta é a função do ano bissexto:
function ano_bissexto($mes, $ano) { $a = $ano - 1968; //ano atual menos o último ano bissexto antes de começar a função time, para quando der um ano, quando eu dividir por 4 (qtdade de anos a cada bissexto) dar os anos corretamente. $a = $a / 4; $array = explode('.', $a); //dividindo o resultado da divisão para pegar só o número inteiro $qtde_bi = $array[0]; if($mes <= 02 ) //vendo se o mês é menor ou iqual fevereiro, porque em fevereiro ainda não teve o dia do bissexto, e se for o dia 29, na outra função vai somar o valor deste dia já { $ano_bi = $qtde_bi - 1; } else { $ano_bi = $qtde_bi; } return $ano_bi; }
Agora a função que vai gerar a data na função time() do php:
function gerar_data($dia,$mes,$ano) { //gerando o dia em segundos $d = $dia * 86400; //gerando o mês em segundos switch ($mes) { case 01: $m = 0; Break; case 02: $m = 2678400; Break; case 03: $m = 5097600; Break; case 04: $m = 7776000; Break; case 05: $m = 10368000; Break; case 06: $m = 13046400; Break; case 07: $m = 15638400; Break; case 08: $m = 18316800; Break; case 09: $m = 20995200; Break; case 10: $m = 23587200; Break; case 11: $m = 26265600; Break; case 12: $m = 28857600; Break; } //gerando o ano em segundos $a = $ano - 1970; $a = $a * 31536000; //gerando os dias de anos bissextos em segundos $dias_bi = ano_bissexto($mes, $ano); $dias_bi = $dias_bi * 86400; //somando todos os segundos agora $time_gerado = $d + $m + $a + $dias_bi; return $time_gerado; }
só que o problema é que em toda data, está sendo gerado 21hr à mais...
se eu coloco
$dia = '10';
$mes = '10';
$ano = '2010';
Ele me gera a data 10/10/2010 às 21:00 (Em time, claro).
Como é sempre 21hr, seria só contar o valor de 21hr em segundos e subtrair e boa, mato o problema, só que seria meio que uma gambiarra, queria saber onde eu errei para poder aprender também, já olhei o código umas 5 vezes, refiz as contas.... =x
Obrigado.
EDIT: Será que tem algo a ver com o GMT?
no código está definido:
date_default_timezone_set('America/Bahia'); //definindo o fuso horário