Tijdreeksgegevens: Aan de slag met PHP Zmanim

Acknowledgments

In deze blog leg ik concepten en technieken uit die betrekking hebben op de manier waarop zogenaamde “Joodse tijden” (zmanim) worden berekend; evenals de technieken die nodig zijn om de PHP Zmanim bibliotheek te gebruiken – een bibliotheek met functies waarmee je gemakkelijk Joodse tijden kunt berekenen.

De PHPZmanim bibliotheek wordt onderhouden door Zachary Weixelbaum. Net als zoveel in de tech-wereld van vandaag is PHP Zmanim zelf gebaseerd op de fundamentele Kosher Java bibliotheek van Eliyahu Hershfeld. Ik ben een enorme schuld van dankbaarheid verschuldigd aan zowel Zachary als Eliyahu – niet alleen voor de inspanningen die ze hebben geleverd bij het ontwikkelen van die bibliotheken, maar ook voor de ondersteuning die ze mij hebben gegeven toen ik me aanpaste aan zowel de technische als de Joodse religieuze richtlijnen (halacha) die nodig zijn om ze te gebruiken.

Introduction

“Wat is de tijd voor de middaggebeden (Mincha) deze week?” is een bedrieglijk complexe vraag. Het is bedrieglijk omdat “middaggebeden” zelfverklarend lijken, maar (zoals met zoveel dingen met betrekking tot Joodse religieuze regels (halacha), er is een enorme hoeveelheid achtergrond, commentaar en specifiekheid vereist.

LET OP: Als je al vertrouwd bent met Joodse tijdconcepten (zmanim), voel je vrij om door te gaan naar de sectie met de titel “Installatie van PHP Zmanim.” Ik zal er geen kwaad van hebben en het ook niet kwalijk nemen.

Het is moeilijk om te begrijpen hoe belangrijk nauwkeurige tijdsberekeningen zijn op de Joodse religieuze dag, week en leven. Het speelt een rol in alles, van wanneer een vasten begint en eindigt tot wanneer het te laat (of te vroeg) is om bepaalde gebeden te zeggen en het moment waarop het eigendom van (laat staan het eten van) brood verboden is.

Met andere woorden, ik zal een citaat delen van Rabbi Abraham Joshua Heschel in zijn boek “The Sabbath”.

De betekenis van de Sabbat is om tijd te vieren in plaats van ruimte. Zes dagen per week leven we onder de tirannie van ruimtelijke zaken; op de Sabbat proberen we ons te harmoniseren met heiligheid in de tijd.

Rabbi Abraham Joshua Heschel, “The Sabbath”

Zelfs met die uitleg zullen sommige lezers zich misschien nog steeds afvragen: “Waarom maak je er zo’n probleem van? Zegt u mij dat God het tegen je zal opnemen als je 5 minuten tekort schiet?”

Het is een terechte vraag en het is de moeite waard om er even over te praten, anders wordt de noodzaak, laat staan de impact van, deze blog (en de technieken en technologieën die het beschrijft) aanzienlijk verminderd.

Nee, natuurlijk kan het God niet schelen. Net zo min als mijn atletismecoach “omgeeft” of ik aan het opwarmen ben voor het hardlopen, mijn trainingssessies in de off-season doe of voldoende water drink. Laten we eerlijk zijn: hoe hard ik ook train, mijn coach zal niet gezonder worden. Toch wil mijn coach – die om me geeft buiten mijn prestaties in de volgende race, dat IK omgee. Ze willen dat ik volledig gecommitteerd ben, alleen maar omdat ze weten dat mijn ervaring daardoor bevredigender zal zijn.

Op dezelfde manier “let” God niet op. Maar we weten (via de teksten van de Torah en de Talmoed) dat God WIL dat WEE ons oppast. En dus hebben Joodse geleerden door de eeuwen heen geprobeerd – met behulp van het bewijs dat in de tekst wordt gepresenteerd – om eenvoudige en simplistische antwoorden te vermijden en dieper te graven om de details te onthullen.

Terug naar de vraag die aan de orde is: “Wat is de tijd voor de middaggebeden?” Om dat te begrijpen, moeten we eerst begrijpen wat “dag” definieert (versus “nacht”); hoe te begrijpen wat de afscheiding is die “ochtend” van “middag” scheidt; hoe de dag effectief in delen te verdelen; en zo veel meer.

Hoewel deze blog enkele van deze concepten en termen indien nodig zal introduceren, mag het niet worden beschouwd als uitputtend door enige strekking van de verbeelding.

Het is geen verrassing dat computers snel werk hebben gemaakt van het berekenen van deze tijden, en nu is er een breed scala aan websites en applicaties klaar om de klus voor ons te doen. Zelfs voor degenen die hun eigen programma’s willen maken om deze berekeningen uit te voeren, zijn er tijdbesparende oplossingen in de vorm van codebibliotheken zoals KosherJava en zijn vele poorten, waaronder PHP, Swift, .Net, JavaScript, Python, en nog veel meer.

Toch is het belangrijk om de theorie achter de tools te begrijpen. Iedereen die een website of app wil maken, moet er zeker van zijn dat hun programma geen verkeerde tijden aflevert. Hoewel, zoals eerder vermeld, niemand “naar de hel” (zo te zeggen) gaat voor het bidden op de verkeerde tijd, is er een strikte gebod:

וְלִפְנֵ֣י עִוֵּ֔ר לֹ֥א תִתֵּ֖ן מִכְשֹׁ֑ל וְיָרֵ֥אתָ מֵּאֱלֹהֶ֖ים
“lifnei iver lo titein michshol v’yareita mei-elohecha”
“Zet geen hindernis voor de blinde”

(Leviticus 19:14)

Het is één ding als een individu per ongeluk iets fout doet. Het is echter heel anders om slechte informatie te verschaffen die ervoor zorgt dat iemand (of erger, heel veel mensen) een fout maakt, in de veronderstelling dat de informatie die ze kregen (van uw app) accuraat en betrouwbaar was.

De Basis Tijden

Met dat in gedachten beginnen we met het begrijpen van de tijden die vrij eenvoudig zijn en het minst worden beïnvloed door variaties in de Joodse traditie:

  • Zonsopgang (Netz Hachma) is de goede oude zeevaart zonsopgang – het moment waarop de bovenrand van de zonnedis de horizon raakt.
  • Zonsondergang (Shkia) is het andere deel van de dagelijkse munt – het moment waarop de bovenrand van de zon net onder de horizon verdwijnt.
  • 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.
    • Houd er rekening mee dat sommige tradities een sha’ah berekenen als 12 delen van de tijd van dageraad (alot hashachar, of gewoon “alot” wanneer licht zichtbaar is over de horizon, maar voor de eigenlijke zonsopgang) tot nacht (tzeis hakochavim, of gewoon “tzeis”, wanneer geen licht zichtbaar is over de horizon, na zonsondergang). We zullen later in de blog meer ingaan op zowel dageraad (alot) als nacht (tzeit).
  • Seizoensminuten (sha’ot zmaniyot) is 1/60 van een seizoenseenheid en, net als een seizoenseenheid, kan groter of kleiner zijn dan een minuut op uw klok.

Zoals u kunt zien, vormen zonsopgang en zonsondergang de fundamentele kern van alle andere tijdberekeningen, en een groot aantal belangrijke Joodse tijdstippen gedurende de dag worden rechtstreeks afgeleid van die twee. Bijvoorbeeld, in sommige tradities, zult u vinden:

  • Sjabbat begint op vrijdagavond, 18 minuten voor zonsondergang (shkia)
  • Sjabbat eindigt op zaterdagavond 45 (of 50, of 72) minuten na zonsondergang (shkia)
  • …en zo voort.

Berekeningen Waar “Het ingewikkeld is”

Zodra u zonsopgang en zonsondergang hebt vastgesteld, is de volgende stap het identificeren van de twee cruciale tijdstippen van dageraad en nacht. Dageraad (Alot haShachar, of gewoon “Alot”) en nacht (Tzeis hakochavim, of gewoon “Tzeis”) spiegelen elkaar op dezelfde manier als zonsopgang en zonsondergang. Dageraad is het moment waarop licht (maar niet de zon) zichtbaar is over de horizon. Nacht is het moment waarop licht niet langer zichtbaar is.

Helaas is of er wel of niet “licht” is zeer subjectief en daarom varieert de manier waarop het is berekend sterk.

  • Sommige tradities gebruiken een vast aantal minuten voor zonsopgang of na zonsondergang.
  • Anderen zullen astronomie gebruiken om de tijd te bepalen waarop de zon een specifiek aantal graden onder de horizon staat.
  • Anderen zullen een formule gebruiken, zoals het aantal daglicht (van zonsopgang tot zonsondergang) nemen, dat in 10 gelijke delen verdelen, en dan dat bedrag aftrekken van zonsopgang of eraan toevoegen bij zonsondergang.
  • Nog anderen zullen de tijd nemen dat de zon onder de horizon staat op een “gelijke” dag (wat betekent de lente- of herfstequinox, wanneer de hoeveelheid zonlicht en duisternis precies hetzelfde is), het verschil (in klokminuten) berekenen tussen die tijd en zonsopgang, die minuten normaliseren tegen “seizoensminuten” (“sha’ot zmaniyot”) voor de specifieke dag in kwestie, en tenslotte dat bedrag aftrekken van zonsopgang (of dat toevoegen aan zonsondergang) voor de dag in kwestie.

Klinkt verwarrend? Zoals de titel van deze sectie zegt, “het is ingewikkeld.”

Mijn punt bij het beschrijven hiervan is niet om te komen tot een enkele “correcte” berekening, maar eerder om u te helpen begrijpen wat het uiteindelijke doel van elke berekening is – evenals voor u om te begrijpen dat er verschillende manieren zijn waarop verschillende Joodse tradities tot elke berekening komen.

De Complexe Tijden

Zodra u dageraad (alot), zonsopgang (netz), zonsondergang (shkia) en nacht (tzeis) hebt, wordt het mogelijk om andere belangrijke dagelijkse tijden te berekenen. Deze omvatten:

  • Het vroegste tijdstip voor de middaggebeden (Mincha Gedola), dat vaak wordt berekend als een bepaald aantal seizoensuren (sha’ah) na zowel dageraad als zonsopgang. Het punt van dit tijdstip is dat het het vroegste moment is waarop “namiddag” (letterlijk, na het midden van de dag) plaatsvindt.
  • Het voorkeurstijdstip voor middaggebeden (Mincha ketana), dat wordt berekend als een groter aantal seizoensuren (sha’ah) na zowel zonsopgang (netz) als dageraad (alot). Het punt hier is dat het meer dan 3/4 van de dag is, wanneer het duidelijk namiddag is – maar zonder het risico dat het per ongeluk nacht (tzeis) wordt.
  • Het laatste tijdstip voor de middaggebeden (Plag haMincha, of “plag”), dat vaak wordt berekend als de tijd tussen het beste tijdstip voor de middaggebeden (mincha ketana) en de nacht (tzeis).

Hoewel er nog verschillende andere belangrijke tijden zijn waar we het in een ander blog over zullen hebben, zijn deze genoeg om ons te helpen beginnen.

Het installeren van de PHP Zmanim Library

Met die technische details uit de weg, kunnen we nu verder gaan met… enkele technische details! Alleen deze keer zijn het TECHNISCHE technische details. (en voor die mensen die helemaal vanaf de introductie naar deze sectie zijn gesprongen, WELKOM! Het is geweldig om je terug te hebben!)

PHP Zmanim is een complexe bibliotheek die niet alleen de import van Kosher Java in de PHP-taal omvat, maar ook enkele ondersteunende modules zoals Carbon (een tool die helpt bij het sneller, gemakkelijker en nauwkeuriger maken van datum- en tijdconversies); Symfony (een webontwerpframework); en enkele andere kleinere hulpmiddelen.

Het punt is, al die modules werken samen met PHP Zmanim en je hebt ze allemaal nodig om iets te laten werken. De gemakkelijkste manier om ze allemaal te installeren, is met behulp van de PHP “composer” utility die afhankelijkheden beheert.

Als je PHP Zmanim op een webserver moet draaien en geen toegang hebt om installers uit te voeren via de commandolijn, heb je nog steeds geluk. Kopieer gewoon de ./vendor directory van een lokale installatie, en – met enkele waarschuwingen – zal het werken.

Wat zijn die waarschuwingen? De belangrijkste is ervoor te zorgen dat de PHP-versie die door uw hostingprovider wordt ondersteund overeenkomt met de versie die u gebruikt bij het installeren via Composer.

Dit brengt me bij de eigenlijke composer installatieopdracht. Ik weet dat we nog niet aan het echt coderen zijn, maar laten we een directory instellen waar de scripts in gaan. Voor deze blog noem ik het /phpzmanim_test.

In een terminalvenster, ga naar die directory:

cd /php zmanim_test

Typ nu de opdracht:

composer -V

(merk op dat het een hoofdletter V is)

Dit zal bevestigen of composer al is geïnstalleerd of niet. Zo niet, zoek dan snel naar de beste manier om het te installeren op uw besturingssysteem.

Typ vervolgens de opdracht:
composer require zachweix/php-zmanim

Dit zal twee dingen doen:

  1. Ten eerste zal het het bestand composer.json in de huidige directory creëren, met instructies dat PHP Zmanim moet worden geïnstalleerd.
  2. Het installeert daadwerkelijk PHP Zmanim voor u in een ./vendor directory binnen de huidige directory. Geen extra stappen nodig.

Het enige andere ‘composer’-gerelateerde punt om op te merken is dat als u ooit een update nodig heeft, u dit gemakkelijk kunt doen door naar de /phpzmanim_test directory (of wat u het noemde) te gaan en de opdracht composer update te typen. Dit zal de informatie in het composer.json-bestand lezen en alles daarin bijwerken dat dat nodig heeft.

(SPOILER: dit betekent dat u het composer.json-bestand NIET moet verwijderen. U hoeft het echter niet naar uw remote site te kopiëren met de rest van uw applicatie als u dat niet wilt.)

Nadat dit is gedaan, moet je de volgende regel in elke PHP-script opnemen die de PHP Zmanim-bibliotheek gebruikt:

PHP

 

require 'vendor/autoload.php';

Aan de slag met PHP Zmanim

Nu de PHP Zmanim is geïnstalleerd, ben je klaar om er wat code mee te schrijven.

Om dit te doen, zal je eerst een PHP-object maken – een verzameling (eigenlijk een array) van gegevens die aan verschillende functies worden doorgegeven. Dit object bevat zowel de specifieke datum voor de tijden die je wilt ophalen als ook de precieze locatiegegevens.

Object maken met “Zmanim::Create()”

Voordat je begint, moet je een paar dingen weten over de locatie waar je tijden voor vraagt:

  • De breedte- en lengtegraad.
  • De tijdzone, geformatteerd volgens het tz database formaat. (bijvoorbeeld: “America/New_York”).
  • De hoogte van die locatie, als je die wilt gebruiken. (SPOILER: heel zelden speelt hoogte een rol in deze berekeningen.)
  • Het jaar, de maand en de dag van de tijden die je zal berekenen.

Het formaat voor het maken van je object is als volgt:

PHP

 

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

Hier is een specifiek voorbeeld:

PHP

 

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

Hoe dat eruit ziet als een script met enkele variabelen in plaats van de letterlijke invoer:

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);

Met die code heb je een object voor de datum van vandaag voor de opgegeven locatie. Je kunt het zelfs afdrukken met de PHP-functie print_r():

PHP

 

print_r($zmanim);

Wat je dan een uitvoer moet geven die ongeveer zo eruit ziet:

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
                )

(er is meer, maar je snapt het idee).

Krijgen van je eerste real-time – Zonsopgang (Netz HaHachma)

Zodra je een object hebt gemaakt, is het gebruiken ervan om specifieke tijden te krijgen via PHP Zmanim bijna anti-climactisch. Het krijgen van zonsopgang is zo simpel als:

PHP

 

$sunrise = $zmanim->sunrise;

Als je er niet bekend mee bent of het nog nooit hebt gebruikt, geeft de -> aan dat je een object (nogmaals, een verzameling gegevenselementen) aan het opvragen bent of een ingebouwde methode gebruikt

Dit zal iets teruggeven dat er zo uitziet:

PHP

 

2024-12-20 07:48:52

Voor degenen die meekijken, ziet de volledige code er tot nu toe zo uit:

PHP

 

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

Samenvatting

Er is nog veel meer te behandelen in PHP Zmanim, waar ik van plan ben in de komende weken aan te werken. Maar dit zou je tenminste op weg moeten helpen met het bouwen van een PHP-gebaseerde script of website en het weergeven van nauwkeurige tijden voor Joodse momenten.

Zoals altijd, stel ik vragen, correcties en complimenten in de reacties hieronder graag in ontvangst.

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