Jump to content


Photo

Colocar Uma Data Na Função Time()


  • Faça o login para participar
1 reply to this topic

#1 Lucas de Haro

Lucas de Haro

    Novato no fórum

  • Usuários
  • 19 posts
  • Sexo:Masculino

Posted 08/07/2010, 12:29

Olá, boa tarde!

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

#2 Édipo Costa Rebouças

Édipo Costa Rebouças

    Veterano

  • Ex-Admins
  • 1079 posts
  • Sexo:Masculino
  • Localidade:Brasil - São Paulo

Posted 08/07/2010, 12:54

Boa tarde amigo, o que a função time faz e retornar um timestamp com a data atual, existem outras funções no PHP que geram um timestamp com base em alguns parametros, algumas são:

mktime
strtotime

Referência para se mexer com datas em php:
Date/Time Functions




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq