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 em dia, o PHP Zmanim é baseado na fundacional biblioteca Kosher Java por Eliyahu Hershfeld. Devo um enorme agradecimento a ambos Zachary e Eliyahu — não apenas pelo trabalho que investiram na criação dessas bibliotecas, mas também pelo apoio que me deram enquanto eu me aprimorava tanto nas diretrizes técnicas quanto nas religiosas judaicas (halacha) necessárias para utilizá-las.

Introdução

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

OBSERVAÇÃO: Se você já está confortável com os conceitos de tempo judaico (zmanim), sinta-se à vontade para pular para a seção intitulada “Instalando PHP Zmanim”. Não ficarei ofendido nem te culparei.

É difícil entender a importância das contas de tempo precisas no dia religioso judaico, semana e vida. Isso influencia 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 Shabat”.

O significado do Shabat é celebrar o tempo em vez do espaço. Seis dias por semana vivemos sob a tirania das coisas do espaço; no Shabat, 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 problema disso? Você está me 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 de, 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 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 gratificante por causa disso.

Do mesmo modo, 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 orações da tarde?” Para entender isso, primeiro precisamos 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 desses horários, e agora há uma ampla variedade de sites e aplicativos prontos para fazer o trabalho por nós. Mesmo para aqueles que desejam 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 deve ter certeza de que seu programa não está inadvertidamente fornecendo horários incorretos. Embora, como mencionado anteriormente, ninguém “vai para o inferno” (por assim dizer) por rezar 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 se engana 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, vamos começar entendendo os horários que são bastante diretos e 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.
    • Note que algumas tradições calculam uma sha’ah como 12 divisões do tempo a partir do amanhecer (alot hashachar, ou apenas “alot” quando a luz é visível sobre o horizonte, mas antes do próprio nascer do sol) até a noite (tzeis hakochavim, ou apenas “tzeis”, quando NÃO há luz visível sobre o horizonte, após o pôr do sol). Vamos entrar mais em ambos, 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 tempos críticos do alvorecer e da noite. O alvorecer (Alot haShachar, ou apenas “Alot”) e a noite (Tzeis hakochavim, ou apenas “Tzeis”) se refletem como o nascer e o pôr do sol. O alvorecer é o momento em que a luz (mas não o sol) é visível sobre o horizonte. A noite é o momento em que a luz não é mais visível.

Infelizmente, a questão de haver ou não “luz” é altamente subjetiva, e, portanto, a maneira como foi calculada 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.
  • No entanto, outros levarão o tempo em que o sol está abaixo do horizonte em um dia “igual” (significando o equinócio de primavera ou outono, quando a quantidade de luz solar e 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”.

Meu ponto ao descrever estes 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 você entender que há 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 momentos diários importantes. Estes incluem:

  • O momento 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 momento é que é o instante mais precoce em que “tarde” (literalmente, após o meio-dia) acontece.
  • O momento preferível 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 ser acidentalmente noite (tzeis).
  • A última hora para as orações da tarde (Plag haMincha, ou “plag”), que geralmente é calculada como o tempo entre o melhor momento 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.

Instalação da Biblioteca PHP Zmanim

Com esses detalhes técnicos resolvidos, agora podemos passar a… 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-VINDO(A)! É ótimo tê-lo(a) de volta!)

PHP Zmanim é uma biblioteca complexa que abrange não apenas a importação do Kosher Java para a linguagem PHP, mas também alguns módulos de suporte 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 é 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 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 letra 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árias etapas adicionais.

A única outra coisa relacionada ao “Composer” a ser observada é que, se você precisar atualizar, pode fazê-lo facilmente entrando no diretório /phpzmanim_test (ou o que você chamou de seu) e digitando 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 deletar o arquivo composer.json. No entanto, você não precisa copiá-lo para o 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 (array, na verdade) 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 extrair 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 longitude.
  • O fuso horário, formatado usando o formato banco de dados de fusos (exemplo: “America/New_York”).
  • A elevação desse local, se 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 como 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é imprimi-lo usando a função print_r() do PHP:

PHP

 

print_r($zmanim);

O que deve fornecer 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 nunca o usou antes, o -> indica que você está consultando um objeto (novamente, uma coleção de elementos de dados) ou usando um método incorporado

Isso retornará algo que se parece com isso:

PHP

 

2024-12-20 07:48:52

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

PHP

 

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

Resumo

Há muito mais a cobrir no PHP Zmanim, o que pretendo 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, agradeço perguntas, correções e elogios nos comentários abaixo.

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