Série de Dados Temporais: Começando com PHP Zmanim

Agradecimentos

Neste blog, estou explicando conceitos e técnicas relacionados tanto à forma como são calculados os chamados “tempos judaicos” (zmanim); quanto às técnicas necessárias para usar a biblioteca PHP Zmanim – uma biblioteca de funções que permite calcular facilmente os tempos judaicos.

A biblioteca PHPZmanim é mantida por Zachary Weixelbaum. Como muitas coisas na tecnologia hoje, o PHP Zmanim é baseado na fundacional biblioteca Kosher Java por Eliyahu Hershfeld. Devo um enorme reconhecimento a ambos Zachary e Eliyahu — não apenas pelo trabalho que investiram na elaboração dessas bibliotecas, mas também pelo apoio que me deram enquanto eu me apresentava aos requisitos técnicos e religiosos judaicos (halacha) necessários para usá-las.

Introdução

“Que horas serão as orações da tarde (Mincha) esta semana?” é uma pergunta aparentemente complexa. É enganosa porque “orações da tarde” parecem ser autoexplicativas, mas (como muitas coisas relacionadas a regras religiosas judaicas (halacha), há uma vasta quantidade de contexto, comentário e especificidade necessária.

OBSERVAÇÃO: Se você já está confortável com conceitos de tempo judaico (zmanim), sinta-se à vontade para pular para a seção rotulada “Instalando PHP Zmanim”. Não vou me ofender nem guardar rancor.

É difícil entender a importância das contas de tempo precisas no dia, semana e vida religiosa judaica. Isso se aplica a tudo, desde quando um jejum começa e termina até quando é tarde demais (ou cedo demais) para dizer certas orações até o momento em que simplesmente possuir (muito menos comer) pão é proibido.

Para expressar de outra forma, compartilharei uma citação do rabino Abraham Joshua Heschel em seu livro “O Sábado”.

O significado do Sábado é celebrar o tempo em vez do espaço. Seis dias por semana vivemos sob a tirania das coisas do espaço; no Sábado, tentamos nos tornar sensíveis à santidade no tempo.

Rabbi Abraham Joshua Heschel, “The Sabbath”

Mesmo com essa explicação, alguns leitores ainda podem se perguntar: “Por que fazer um grande lance disso? Você está dizendo que Deus vai segurar isso contra você se estiver 5 minutos fora do horário?”

É uma pergunta válida e vale a pena uma discussão, porque, caso contrário, a necessidade, muito menos o impacto deste blog (e as técnicas e tecnologias que descreve) é diminuído.

Não, claro, Deus não se importa. Assim como meu treinador de atletismo não “se importa” se eu faço aquecimento antes de correr, faço minhas sessões de treinamento fora de temporada ou bebo água suficiente. Vamos enfrentar: não importa o quão duro eu treino, meu treinador não ficará mais saudável. No entanto, meu treinador – que se preocupa comigo além do meu desempenho na próxima corrida, quer que EU me importe. Eles querem que eu esteja totalmente comprometido, seja apenas porque sabem que minha experiência será mais satisfatória por causa disso.

Da mesma forma, Deus não “se importa”. Mas sabemos (através dos textos do Torá e do Talmude) que Deus quer que NÓS nos importemos. E assim, estudiosos judeus ao longo dos milênios têm tentado – usando as evidências apresentadas no texto – evitar respostas simples e simplistas, e aprofundar-se para descobrir os detalhes.

Voltando à questão em mãos: “Que horas são as preces da tarde?” Para entender isso, primeiro temos que entender o que define “dia” (em oposição a “noite”); como entender o que separa “manhã” de “tarde”; como dividir efetivamente o dia em partes; e muito mais.

Embora este blog introduza alguns desses conceitos e termos conforme necessário, não deve ser considerado exaustivo por nenhum meio.

Não é surpresa que computadores tenham facilitado o cálculo dessas horas, e agora há uma ampla gama de sites e aplicativos prontos para fazer o trabalho por nós. Mesmo para aqueles que querem criar seus próprios programas para fazer esses cálculos, existem soluções que economizam tempo na forma de bibliotecas de código como KosherJava e seus muitos ports, incluindo PHP, Swift, .Net, JavaScript, Python, e muitos outros.

No entanto, é importante entender a teoria por trás das ferramentas. Qualquer pessoa que deseje criar um site ou aplicativo precisa ter certeza de que seu programa não está involuntariamente fornecendo horários errados. Embora, como mencionado anteriormente, ninguém “vai para o inferno” (por assim dizer) por orar no horário errado, há um mandamento estrito:

וְלִפְנֵ֣י עִוֵּ֔ר לֹ֥א תִתֵּ֖ן מִכְשֹׁ֑ל וְיָרֵ֥אתָ מֵּאֱלֹהֶ֖יךָ
“lifnei iver lo titein michshol v’yareita mei-elohecha”
“Não coloque um obstáculo na frente do cego”

(Leviticus 19:14)

É uma coisa se uma pessoa errar acidentalmente. É bem outra coisa fornecer informações ruins que levam alguém (ou pior, MUITAS pessoas) a cometer um erro, acreditando que as informações que receberam (do seu aplicativo) eram precisas e confiáveis.

Os Horários Básicos

Com isso em mente, começaremos entendendo os horários que são bastante diretos e os menos afetados por variações na tradição judaica:

  • Nascer do Sol (Netz Hachma) é o bom e velho nascer do sol náutico – o momento em que a borda superior do disco do sol toca o horizonte.
  • Pôr do Sol (Shkia) é o outro lado da moeda diária – o momento em que a borda superior do sol desce apenas abaixo do horizonte.
  • A “seasonal hour” (sha’ah) refers to the even division of daylight, the time between sunrise and sunset. There are always 12 seasonal hours, but they may be longer or shorter than a regular (on your clock) hour because the amount of daylight fluctuates with the season.
    • Observe que algumas tradições calculam uma sha’ah como 12 divisões do tempo desde o amanhecer (alot hashachar, ou apenas “alot” quando a luz é visível no horizonte, mas antes do próprio nascer do sol) até a noite (tzeis hakochavim, ou apenas “tzeis”, quando NÃO há luz visível no horizonte, após o pôr do sol). Veremos mais sobre o amanhecer (alot) e a noite (tzeit) mais adiante no blog.
  • Minutos sazonais (sha’ot zmaniyot) é 1/60 de uma hora sazonal e, assim como uma hora sazonal, pode ser maior ou menor do que um minuto em seu relógio.

Como você pode ver, o nascer e o pôr do sol formam o núcleo fundamental de todos os outros cálculos de tempo, e um grande número de tempos judaicos importantes durante o dia são derivados diretamente desses. Por exemplo, em algumas tradições, você encontrará:

  • O Shabbat começa na sexta-feira à noite, 18 minutos antes do pôr do sol (shkia)
  • O Shabbat termina no sábado à noite 45 (ou 50, ou 72) minutos após o pôr do sol (shkia)
  • …e assim por diante.

Cálculos em que “é complicado”

Uma vez que você tenha o nascer e o pôr do sol definidos, o próximo passo é identificar os dois momentos críticos do alvorecer e da noite. Alvorecer (Alot haShachar, ou apenas “Alot”) e noite (Tzeis hakochavim, ou apenas “Tzeis”) se complementam da mesma maneira que o nascer e o pôr do sol. O alvorecer é o momento em que a luz (mas não o sol) é visível na linha do horizonte. A noite é o momento em que a luz não é mais visível.

Infelizmente, se há ou não “luz” é altamente subjetivo, e, portanto, a maneira como isso foi calculado varia muito.

  • Algumas tradições usam um número fixo de minutos do relógio antes do nascer do sol ou após o pôr do sol.
  • Outros usarão a astronomia para identificar o tempo em que o sol está abaixo do horizonte por um número específico de graus.
  • Outros usarão uma fórmula, como pegar a quantidade de luz do dia (do nascer ao pôr do sol), dividir isso em 10 partes iguais e, em seguida, subtrair essa quantidade do nascer do sol ou adicioná-la ao pôr do sol.
  • Contudo, outros levarão em conta o tempo durante o qual o sol está abaixo do horizonte em um dia “igual” (significando o equinócio de primavera ou outono, quando a quantidade de luz do sol e de escuridão são exatamente iguais), calcularão a diferença (em minutos de relógio) entre esse tempo e o nascer do sol, normalizarão esses minutos em relação aos “minutos sazonais” (“sha’ot zmaniyot”) para o dia específico em questão e, finalmente, subtrairão essa quantidade do nascer do sol (ou adicionarão isso ao pôr do sol) para o dia em questão.

Parece confuso? Como o título desta seção diz, “é complicado”.

O meu ponto ao descrever estes métodos não é estabelecer uma única “correção” de cálculo, mas sim ajudar você a entender o objetivo final de cada tipo de cálculo – bem como para que você entenda que existem múltiplas maneiras pelas quais diferentes tradições judaicas chegam a cada cálculo.

Os Tempos Complexos

Uma vez que você tenha o amanhecer (alot), o nascer do sol (netz), o pôr do sol (shkia) e a noite (tzeis), torna-se possível calcular outros tempos diários importantes. Estes incluem:

  • O tempo mais cedo para as orações da tarde (Mincha Gedola), que geralmente é calculado como um certo número de horas sazonais (sha’ah) após o amanhecer ou o nascer do sol. O ponto deste tempo é que é o momento mais precoce em que “tarde” (literalmente, após o meio-dia) acontece.
  • O tempo preferencial para as orações da tarde (Mincha ketana), que é calculado como um número maior de horas sazonais (sha’ah) após o nascer do sol (netz) ou o amanhecer (alot). O ponto aqui é que é mais do que 3/4 do caminho através do dia, quando é CLARAMENTE tarde – mas sem o risco de, acidentalmente, ser noite (tzeis).
  • O último horário para as orações da tarde (Plag haMincha, ou “plag”), que geralmente é calculado como o tempo entre o melhor horário para as orações da tarde (mincha ketana) e a noite (tzeis).

Embora existam outros momentos-chave que abordaremos em um blog diferente, estes são suficientes para começarmos.

Instalando a Biblioteca PHP Zmanim

Com esses detalhes técnicos resolvidos, podemos agora passar para… alguns detalhes técnicos! Exceto que desta vez são detalhes técnicos TÉCNICOS. (E para aquelas pessoas que pularam direto da introdução para esta seção, BEM-VINDOS! É ótimo tê-los de volta!)

O PHP Zmanim é uma biblioteca complexa que não apenas inclui a importação do Kosher Java para a linguagem PHP, mas também alguns módulos de apoio como Carbon (uma ferramenta que ajuda a tornar as conversões de data e hora mais rápidas, fáceis e precisas); Symfony (um framework de design web); e algumas outras utilidades menores.

O ponto é que todos esses módulos trabalham em conjunto com o PHP Zmanim e você precisa de todos eles instalados para que algo funcione. A maneira mais fácil de instalá-los todos é usando a utilidade PHP “composer” que gerencia dependências.

Se você precisa executar o PHP Zmanim em um servidor web e não tem acesso para executar instaladores no prompt de comando, ainda tem sorte. Basta copiar o diretório ./vendor de uma instalação local, e – com algumas ressalvas – funcionará.

Quais são essas ressalvas? A principal é garantir que a versão do PHP suportada pelo seu provedor de hospedagem corresponda à que você usa ao instalar via Composer.

Isso me leva ao comando de instalação real do Composer. Eu sei que ainda não chegamos a realmente codificar nada, mas vamos configurar um diretório onde os scripts vão ficar. Para este blog, vou chamá-lo de /phpzmanim_test.

Em uma janela de terminal, mova-se para esse diretório:

cd /php zmanim_test

Agora digite o comando:

composer -V

(note que é uma V maiúscula)

Isso confirmará se o Composer está instalado ou não. Se não estiver, faça uma pesquisa rápida para descobrir a melhor maneira de instalá-lo no seu sistema operacional.

Em seguida, digite o comando:
composer require zachweix/php-zmanim

Isso fará duas coisas:

  1. Primeiro, criará o arquivo composer.json no diretório atual, com instruções de que o PHP Zmanim deve ser instalado.
  2. Na verdade, instala o PHP Zmanim para você em um diretório ./vendor dentro do diretório atual. Não são necessários passos adicionais.

A única outra coisa relacionada ao “Composer” a ser observada é que, se você precisar atualizar, pode fazê-lo facilmente indo para o diretório /phpzmanim_test (ou o que você chamou de seu) e digite o comando composer update. Isso lerá as informações no arquivo composer.json e atualizará tudo o que encontrar lá.

(SPOILER: isso significa que você NÃO deve excluir o arquivo composer.json. No entanto, você não precisa copiá-lo para seu site remoto com o resto de sua aplicação, se não quiser.)

Uma vez feito isso, você precisa incluir a seguinte linha em todos os scripts PHP que usarão a biblioteca PHP Zmanim:

PHP

 

require 'vendor/autoload.php';

Introdução ao PHP Zmanim

Agora que o PHP Zmanim está instalado, você está pronto para começar a escrever algum código com ele.

Para fazer isso, primeiro você criará um objeto PHP – uma coleção (na verdade, um array) de dados que são passados para várias funções. Este objeto contém tanto a data específica para os horários que você deseja consultar quanto as informações de localização precisas.

Criando um Objeto com “Zmanim::Create()”

Antes de começar, você precisará saber algumas coisas sobre o local onde está solicitando horários:

  • A latitude e a longitude.
  • O fuso horário, formatado usando o formato banco de dados de fusos (exemplo: “America/New_York”).
  • A elevação desse local, se você optar por usá-la. (SPOILER: muito raramente a elevação influencia esses cálculos.)
  • O ano, mês e dia dos horários que você estará calculando.

O formato para criar seu objeto é o seguinte:

PHP

 

$VARNAME = Zmanim::create(YEAR, MONTH, DAY, "NAME OF LOCATION", LATITUDE, LONGITUDE, ELEVATION, "TIME ZONE");

Aqui está um exemplo específico:

PHP

 

$zmanim = Zmanim::create(2019, 2, 21, "New York City", 40.850519, -73.929214, 200, "America/New_York");

Como fica isso em um script com algumas variáveis no lugar da entrada literal:

PHP

 

<?php
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;

$getdate = date('Y-m-d');
$getyear = date('Y', strtotime($getdate));
$getmonth = date('m', strtotime($getdate));
$getday = date('d', strtotime($getdate));

$locname = "Beit Knesset Chochmat Shlomo, Beachwood, OH";
$lat = 41.4939407;
$long = -81.516709;
$elev = 0;
$tz = 'America/New_York';

$zmanim = Zmanim::create($getyear, $getmonth, $getday, $locname, $lat, $long, $elev, $tz);

Com esse código em vigor, você tem um objeto para a data de hoje para a localização especificada. Você pode até imprimir usando a função print_r() do PHP:

PHP

 

print_r($zmanim);

O que deve lhe dar uma saída que se parece com algo assim:

PHP

 

PhpZmanim\Zmanim Object
(
    [calendar:PhpZmanim\Calendar\AstronomicalCalendar:private] => Carbon\Carbon Object
        (
            [endOfTime:protected] => 
            [startOfTime:protected] => 
            [constructedObjectId:protected] => 00000000000000080000000000000000
            [localMonthsOverflow:protected] => 
            [localYearsOverflow:protected] => 
            [localStrictModeEnabled:protected] => 
            [localHumanDiffOptions:protected] => 
            [localToStringFormat:protected] => 
            [localSerializer:protected] => 
            [localMacros:protected] => 
            [localGenericMacros:protected] => 
            [localFormatFunction:protected] => 
            [localTranslator:protected] => 
            [dumpProperties:protected] => Array
                (
                    [0] => date
                    [1] => timezone_type
                    [2] => timezone
                )

(há mais, mas você entende a ideia).

Obtendo Seu Primeiro Tempo Real – Nascer do Sol (Netz HaHachma)

Uma vez que você tenha um objeto criado, usando-o para obter horários específicos através do PHP Zmanim é quase anticlímax. Obter o nascer do sol é tão simples quanto:

PHP

 

$sunrise = $zmanim->sunrise;

Se você não está familiarizado com isso ou não o usou antes, o -> indica que você está consultando um objeto (novamente, uma coleção de elementos de dados) ou usando um método interno

Isso retornará algo que se parece com isto:

PHP

 

2024-12-20 07:48:52

Para aqueles que estão acompanhando, o código completo até agora se parece com isto:

PHP

 

sunrise;
echo "$sunrise\n";
?>

Resumo

Há muito mais a cobrir no PHP Zmanim, o que planejo fazer nas próximas semanas. Mas isso pelo menos deve ajudá-lo a começar a criar um script ou site baseado em PHP e exibir horários precisos para momentos judaicos.

Como sempre, convido perguntas, correções e parabéns nos comentários abaixo.

Source:
https://dzone.com/articles/time-data-series-getting-started-with-php-zmanim