jdtofrench()
A função jdtofrench() do PHP converte um número de dias julianos em uma data do Calendário Republicano Francês, gerenciando automaticamente os anos bissextos.
Introdução
O Calendário Revolucionário Francês, também conhecido como Calendário Republicano, foi criado durante a Revolução Francesa e utilizado na França de 1793 a 1805. Foi projetado para substituir o calendário gregoriano e visava ser mais racional e científico. O calendário baseava-se no conceito de tempo decimal e era composto por 12 meses de 30 dias cada, com 5 ou 6 dias adicionais ao final do ano para compensar os dias excedentes.
A Contagem de Dias Julianos, por outro lado, é um sistema de contagem de dias utilizado em astronomia. É definida como o número de dias decorridos desde o meio-dia de 1º de janeiro de 4713 a.C. (calendário juliano). O PHP inclui a função nativa jdtofrench() na extensão Calendar para converter a Contagem de Dias Julianos para o Calendário Revolucionário Francês, gerenciando automaticamente as regras de anos bissextos do calendário.
Fórmula de Conversão
Para converter a Contagem de Dias Julianos para a Data do Calendário Revolucionário Francês, utilizamos o seguinte algoritmo:
J = JDC - 2375839
N = J mod 365
if N < 360 then
Q = floor(N / 30) + 1
R = (N mod 30) + 1
else
Q = 13
R = N - 359
end ifOnde:
- J é o número de dias decorridos desde o início do Calendário Revolucionário Francês (22 de setembro de 1792)
- N é o número do dia no ano corrente (0-364)
- Q é o número do mês (1-12 para os 12 meses, 13 para os dias complementares)
- R é o número do dia no mês (1-30) ou o dia complementar (1-5/6)
Explicação da Fórmula
A fórmula para converter a Contagem de Dias Julianos para a Data do Calendário Revolucionário Francês é direta quando analisada passo a passo. Vejamos cada etapa.
Passo 1: Calcular J e N
Primeiro, calcule J subtraindo 2375839 (a Contagem de Dias Julianos de 22 de setembro de 1792, a época do calendário) da Contagem de Dias Julianos alvo. Em seguida, encontre N, o número do dia dentro do ciclo atual de 365 dias:
J = JDC - 2375839
N = J mod 365Passo 2: Calcular Q e R
O calendário Revolucionário Francês divide o ano em 12 meses de exatamente 30 dias, seguidos de 5 ou 6 dias complementares. Determinamos o mês (Q) e o dia (R) usando estas regras:
if N < 360 then
Q = floor(N / 30) + 1
R = (N mod 30) + 1
else
Q = 13
R = N - 359
end ifSe N for menor que 360, a data cai dentro de um dos 12 meses. Dividimos N por 30 para encontrar o índice do mês e somamos 1. O resto fornece o índice do dia, também ajustado somando 1. Se N for 360 ou maior, a data cai no período dos dias complementares (Sans-culottides), ao qual é atribuído o número de mês 13.
Sintaxe
jdtofrench(int $julian_day): string| Parâmetro | Descrição |
|---|---|
$julian_day | O inteiro da Contagem de Dias Julianos a ser convertido. |
Valor de retorno: uma string no formato "mês/dia/ano", onde cada parte é um número (por exemplo "6/12/1"). A função retorna "0/0/0" para qualquer Contagem de Dias Julianos fora do intervalo válido do calendário (22 de setembro de 1792 a 22 de setembro de 1806).
Exemplo
Vamos converter a Contagem de Dias Julianos 2376000 para uma Data do Calendário Revolucionário Francês.
Primeiro, calcule J e N:
J = 2376000 - 2375839 = 161
N = 161 mod 365 = 161Em seguida, calcule Q e R:
N < 360, so:
Q = floor(161 / 30) + 1 = 5 + 1 = 6
R = (161 mod 30) + 1 = 11 + 1 = 12Portanto, o resultado é mês 6, dia 12, ano 1. Usando a tabela de meses abaixo, o mês 6 é Ventôse, resultando em 12 Ventôse, Ano 1.
Implementação em PHP
O PHP fornece a função nativa jdtofrench() na extensão Calendar, que trata a conversão e a lógica dos dias complementares automaticamente. Ela retorna uma string numérica "mês/dia/ano":
// Requires the Calendar extension
echo jdtofrench(2376000); // Outputs: 6/12/1Os três números correspondem exatamente ao Q (mês), R (dia) e ao ano que calculamos acima. Para transformá-los no nome histórico do mês, divida a string e consulte o mês em uma tabela:
$frenchMonths = [
1 => "Vendémiaire", 2 => "Brumaire", 3 => "Frimaire",
4 => "Nivôse", 5 => "Pluviôse", 6 => "Ventôse",
7 => "Germinal", 8 => "Floréal", 9 => "Prairial",
10 => "Messidor", 11 => "Thermidor", 12 => "Fructidor",
13 => "Sans-culottides",
];
list($month, $day, $year) = explode("/", jdtofrench(2376000));
echo "{$day} " . $frenchMonths[$month] . ", Year {$year}"; // 12 Ventôse, Year 1Para datas fora do intervalo válido do calendário, a função retorna "0/0/0", portanto verifique esse valor sentinela em vez de assumir uma data real:
$jdc = 2376000;
$result = jdtofrench($jdc);
if ($result !== "0/0/0") {
echo "French Republican date: {$result}";
} else {
echo "Date is outside the French Revolutionary Calendar range.";
}Funções Relacionadas
A extensão Calendar fornece conversores correspondentes que podem ser combinados com jdtofrench():
- frenchtojd() — a inversa: data Republicana Francesa de volta para uma Contagem de Dias Julianos.
- jdtogregorian() — Contagem de Dias Julianos para uma data gregoriana.
- jdtojulian() — Contagem de Dias Julianos para uma data do calendário juliano.
- jddayofweek() — o dia da semana para uma determinada Contagem de Dias Julianos.
Conclusão
Em conclusão, o PHP fornece a função nativa jdtofrench() na extensão Calendar para converter Contagens de Dias Julianos em datas do Calendário Revolucionário Francês. Ao utilizar essa função nativa, é possível traduzir com precisão datas históricas, contabilizando automaticamente as regras de anos bissextos e os dias complementares do calendário.