Como Converter Data Judaica em Data Juliana no PHP
Saiba como usar jewishtojd() no PHP para converter datas do calendário judaico em Contagem de Dias Julianos com exemplos práticos.
A função jewishtojd() do PHP converte uma data do calendário judaico (hebraico) em uma Contagem de Dias Julianos — um número inteiro único que identifica um dia. Como a Contagem de Dias Julianos é neutra em relação ao calendário, ela funciona como um "pivô" comum que permite converter entre sistemas de calendário: converta uma data judaica para um Dia Juliano e, em seguida, converta esse número em uma data gregoriana (ou qualquer outro calendário suportado). Esta página explica como a função funciona, seus parâmetros e casos extremos, além de mostrar exemplos verificados e executáveis.
As funções de Calendário requerem a extensão PHP
calendar. Ela é incluída na maioria das versões e está habilitada por padrão no Windows; no Linux, pode ser necessário compilar o PHP com--with-calendarou instalar um pacote comophp-calendar.
O que é uma Contagem de Dias Julianos?
Uma Contagem de Dias Julianos (JDN) é o número de dias decorridos desde o meio-dia (UTC) de 1º de janeiro de 4713 AEC no calendário juliano proléptico. Não confunda com o calendário juliano — apesar do nome compartilhado, a Contagem de Dias Julianos é apenas um contador contínuo de dias, sem meses ou anos.
O JDN é o formato de ponte para a extensão de calendário do PHP. Toda função *tojd() (jewishtojd(), gregoriantojd(), juliantojd(), frenchtojd()) produz um JDN, e toda função jdto*() consome um. Portanto, toda conversão entre calendários passa por ele:
Jewish date ──jewishtojd()──▶ JDN ──jdtogregorian()──▶ Gregorian dateAssinatura da função
jewishtojd(int $month, int $day, int $year): int| Parâmetro | Descrição |
|---|---|
$month | Número do mês judaico onde 1 = Tishri, não janeiro (veja a armadilha abaixo). O intervalo válido é 1–13. |
$day | Dia do mês, 1–30. |
$year | Ano judaico, contado a partir da data tradicional da criação (ano 1 ≈ 3761 AEC). |
Retorna a Contagem de Dias Julianos como um inteiro, ou 0 para uma data fora do intervalo suportado (anos aproximadamente de 1 a 9999).
Armadilha: a numeração dos meses começa em Tishri
Este é o erro mais comum com jewishtojd(). O ano religioso judaico começa na primavera (Nisan), mas o PHP numera os meses a partir de Tishri (o ano novo civil, Rosh Hashaná). Portanto:
| # | Mês (ano não-bissexto) |
|---|---|
| 1 | Tishri |
| 2 | Heshvan |
| 3 | Kislev |
| 4 | Tevet |
| 5 | Shevat |
| 6 | Adar |
| 7 | Adar (igual ao 6 em ano não-bissexto) |
| 8 | Nisan |
| 9 | Iyyar |
| 10 | Sivan |
| 11 | Tammuz |
| 12 | Av |
| 13 | Elul |
Em um ano bissexto, um mês extra é inserido: o mês 6 torna-se Adar I e o mês 7 torna-se Adar II. Passar 6 não significa junho ou Sivan — Sivan é o mês 10.
Exemplo básico
Isso converte 6 Sivan 5783 (o festival de Shavuot, que é o 10º mês, dia 6) para sua Contagem de Dias Julianos e, em seguida, de volta para uma data gregoriana para que você possa verificar:
Convertendo uma data judaica para uma Contagem de Dias Julianos
<?php
$jewishMonth = 10; // Sivan
$jewishDay = 6;
$jewishYear = 5783;
$jdn = jewishtojd($jewishMonth, $jewishDay, $jewishYear);
echo "Julian Day Count: " . $jdn . "\n";
echo "Gregorian date: " . jdtogregorian($jdn) . "\n";Saída:
Julian Day Count: 2460091
Gregorian date: 5/26/2023Portanto, 6 Sivan 5783 cai em 26 de maio de 2023 no calendário gregoriano.
Convertendo uma data judaica para gregoriana
Combinar jewishtojd() com jdtogregorian() é o caso de uso mais comum no mundo real — por exemplo, encontrar a data gregoriana de Rosh Hashaná (1 Tishri):
<?php
function jewishToGregorian(int $month, int $day, int $year): string
{
$jdn = jewishtojd($month, $day, $year);
if ($jdn === 0) {
return "Invalid Jewish date";
}
return jdtogregorian($jdn);
}
echo jewishToGregorian(1, 1, 5784) . "\n"; // Rosh Hashanah 5784Saída:
9/16/2023Conversão de ida e volta com jdtojewish()
O inverso de jewishtojd() é jdtojewish(), que transforma uma Contagem de Dias Julianos de volta em uma string de data judaica no formato mês/dia/ano. A conversão de ida e volta é uma boa maneira de confirmar que a numeração dos meses está correta:
<?php
$jdn = jewishtojd(10, 6, 5783); // 6 Sivan 5783
echo "JDN: " . $jdn . "\n";
echo "Jewish: " . jdtojewish($jdn) . "\n"; // month/day/yearSaída:
JDN: 2460091
Jewish: 10/6/5783Tratando entradas inválidas
Para uma data que o PHP não consegue representar, jewishtojd() retorna 0 em vez de lançar um erro, portanto sempre verifique isso antes de passar o resultado para outra função:
<?php
$jdn = jewishtojd(0, 5, 5783); // month 0 is invalid
var_dump($jdn); // int(0)
echo $jdn === 0 ? "Out of range\n" : jdtogregorian($jdn) . "\n";Saída:
int(0)
Out of rangeQuando eu usaria isso?
- Exibir datas hebraicas/feriados de um banco de dados no calendário gregoriano local do usuário.
- Calcular o número de dias entre duas datas fornecidas em sistemas de calendário diferentes (subtraia seus JDNs).
- Encontrar o dia da semana para uma data judaica alimentando o JDN para
jddayofweek().
Conclusão
jewishtojd() converte uma data do calendário judaico (hebraico) em uma Contagem de Dias Julianos, o inteiro neutro em relação ao calendário que a extensão de calendário do PHP usa como pivô para todas as conversões entre calendários. As duas coisas a lembrar são que a numeração dos meses começa em Tishri (1), não em Nisan, e que a função retorna 0 para datas fora do intervalo. Combine-a com jdtogregorian(), jdtojewish() ou jddayofweek() para construir fluxos completos de trabalho com datas.