note 42743 deleted from function.mktime by nlopess
| From: | nlopess@php.net | Date: | Thu, 27 May 2004 18:04:08 +0000 |
| Subject: | note 42743 deleted from function.mktime by nlopess | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-70208@lists.php.net to get a copy of this message | ||
Note Submitter: Toth, Ighor
----
<?php
function calculartempo ($hora = false, $minuto = false, $segundo = false, $mes = false, $dia =
false, $ano = false){
// Por séculos, os egipitos usaram como calendário (12 * 30 + 5)-dias.
// Os gregos começarão a usar os pulos-anos ao redor de 400 d.c.
// Ceasar ajustou o calendário romano para começar com Janeiro antes de Março.
// Todo o conhecimento foi passado pelos Arabes, que mostraram um erro no pular de anos.
// Em 1232, Sacrobosco (Eng.) calculou um erro em 1 dia por 288 anos.
// Em 1582, o papa Gregory XIII removeu 10 dias (outubro 15-24) para desfazer parcialmente
// um erro, e instituiu a excepção de 400 ao inves de 100 anos,
// (observação 400 melhor que 288 anos) para desfazer o resto do erro.
// Aproximadamente em 2044, a terra coincidirá outra vez com o trópico do cancer.
// Ao redor 4100, o calendário necessitara de algum ajuste outra vez.
if ($hora === false) $hora = Date ("G");
if ($minuto === false) $minuto = Date ("i");
if ($segundo === false) $segundo = Date ("s");
if ($mes === false) $mes = Date ("n");
if ($dia === false) $dia = Date ("j");
if ($ano === false) $ano = Date ("Y");
if ($ano >= 1970) return mktime ($hora, $minuto, $segundo, $mes, $dia, $ano);
// datas anteriores a 1-1-1970 (Correção do Win32)
$m_dias = Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if ($ano % 4 == 0 && ($ano % 100 > 0 || $ano % 400 == 0)){
$m_dias[1] = 29; // anos sem pulo poderam ser: 1700, 1800, 1900, 2100, etc.
}
// ir para tras (-), baseado no $ano
$d_ano = 1970 - $ano;
$dias = 0 - $d_ano * 365;
$dias -= floor ($d_ano / 4); // compensar por anos de pulo
$dias += floor (($d_ano - 70) / 100); // compensar por anos que não tem pulo
$dias -= floor (($d_ano - 370) / 400); // compensat outra vez por anos gigantes de pulo
// ir para frente (+), baseado em $mes e $dia
for ($i = 1; $i < $mes; $i++){
$dias += $m_dias [$i - 1];
}
$dias += $dia - 1;
// ir para frente (+) baseado na $hora, $minuto e $segundo
$selo = $dias * 86400;
$selo += $hora * 3600;
$selo += $minuto * 60;
$selo += $segundo;
return $selo;
}
?>