PHP functie voor zonsopgang en zonsondergang

woensdag, 16 januari 2013 | door +Sigrid de Jong | 3 Reacties » |

 

Waarom wil ik een functie voor zonsopgang en zonsondergang?

Oke het is een beetje vreemd want waar heb je dat nu weer voor nodig? Maar ik wilde dus dat deze website er overdag anders uitziet dan snacht’s. Nou zou je dat gemakkelijk kunnen doen als je zegt tussen 6 uur s’morgens en 6 uur s’avonds is het dag en daarna is het nacht. Maar dat wilde ik dus niet, ik wilde dat het gelijk opging met het daglicht buiten. Ik definieer dag dus als de tijd tussen zonsopgang en zonsondergang.

Een voorbeeld van een nuttig gebruik van deze functie zijn de zonsopgang en ondergang tijden van de Bilt

zonsondergang

 

PHP functies date_sunrise() en date_sunset()

Nu is PHP ontzettend uitgebreid en heb je overal functies voor, dus er is vast ook wel een functie voor de tijd waarop de zon op en onder gaat en ja die is er. Die functies zijn: date_sunrise() voor de zonsopgang en date_sunset() voor de zonsondergang en ze geven een de tijd (als timestamp) voor een bepaalde datum. Verder zijn de lengte- en de breedtegraad, het zenith en het verschil met greenwiche meantime nog nodig voor de funtie. Omdat die allemaal de tijd voor zonsopgang en ondergang bepalen natuurlijk.

De functies zien eruit als:

date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);

De dingen tussen haakjes zijn de argumenten van de functie, ik ga ze even allemaal bij langs.

  • time() is de functie voor de huidige tijd (dus de tijd dat je bezoeker je website bezoekt, omdat PHP een serversript is is dat dus de tijd op de server van je hostingprovider).
  • SUNFUNCS_RET_STRING bepaald in wat voor formaat je de zonsopgang en zonsondergang terug krijgt. Met SUNFUNCS_RET_STRING krijg je de tijd terug als string, dus b.v. als 16:46 en daarmee kun je de tijd mooi weergeven. Je kunt ook SUNFUNCS_RET_DOUBLE of SUNFUNCS_RET_TIMESTAMP gebruiken. de DOUBLE is een getal waarmee je kunt rekenen, b.v. 16.78243132 (dus geen minuten maar decimalen van uren) en TIMESTAMP is het aantal seconden na 00:00:00 1 januari 1970 (UTC).
  • $lat is de Noorderbreedte, voor Friesland is die ongeveer 53, voor midden Nederland 52 en voor België 51 graden.
  • $long is de Westerlengte en voor Nederland is die 4 tot 6 dus ongeveer 5 graden.
  • $zenith … iets met hoe je de hemel ziet, ik heb hem op 90 graden gezet net als in het voorbeeld, dat is lood recht.
  • $offset is het verschil met greenwitch meentime en voor Nederland is dat 1 uur, dus offset is 1 in de wintertijd, als het zomertijd is komt daar nog een uur bij en is de offset 2. Ik hoop dat de functie al vanzelf rekening houdt met zomer en wintertijd en anders zal ik het begin april wel merken.

Je kunt deze waarden als getallen ingeven, b.v. date_sunrise(time(), SUNFUNCS_RET_STRING, 52, 5, 90, 1);

Of je kunt variabelen gebruiken en die eerst een waarde geven. Dat is handiger als je de waardes meerdere keren wilt gebruiken en je ze makkelijk wilt kunnen wijzigen. Ook wordt de functie er overzichtelijker van.

 

De PHP handleiding over de functie

 

 

Ik heb de functies als volg gebruikt:

$lat = 50.882; // Noorderbreedte
$long = 4.699; // oosterlengte
$offset = 1; // verschil tussen GMT en lokale tijd in uren

date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset)

date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset)

 

Noorderbreedte en Oosterlengte bepalen

Het is nog mooier om de Noorderbreedte en Oosterlengte wat preciezer in te voeren, b.v van je woonplaats, bedrijf of plek van je website (voor zover die een plek heeft).

Nou had ik daar zo’n mooie site voor gevonden… en die vind ik nu niet meer

Deze is ook mooi: http://e-learning.classy.be/coordinatenkaart/coordinatenkaart.html

Je kan het ook opzoeken via google earth of google maps.

 

Nog een if then erom heen voor het wisselen van de layout

Dat heb ik als volgt gedaan: Als de tijd later (dus groter) is dan de zonsopgang en voor (dus kleiner dan) de zonsondergang dan is het dag en anders is het nacht. In PHP:

$buitenlicht=”x”;
if ((time() > date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset) )
&& (time() < date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset) )){
$buitenlicht=”licht”;}
else {
$buitenlicht=”donker”;
}

In plaats van dag en nacht heb ik het trouwens buitenlicht en licht e donker genoemd.

Dus nu is x licht als het buiten licht is en donker als het buiten donker is, cool he.

 

 Een andere stylesheet pakken

Om de website dus overdag anders weer te geven dan snachts heb ik 2 stijlsheets gemaakt, de ene heb ik licht.css en de ander donker.css genoemd. Het eneige verschil dat ik gemaakt heb is trouwens de achtergrond afbeelding, ‘s nachts sterren en overdag wolken.

In de header waar de stylesheet wordt geladen laad die nu dus de ene of de andere met de code:

<link rel=”stylesheet” type=”text/css” href=”<?php bloginfo(‘template_directory’); ?>/css/<?php echo($buitenlicht);?>.css” media=”screen” />

De stylescheet is dus de variabele $buitenlicht en dan .css. Die variabele moet tussen php code en wordt daarom <?php echo($buitenlicht);?>

Even dacht ik dat wordpress maar een style sheet pakt en dat die style.css moet heten omdat dat de standaard is, maar dat hoeft dus gelukkig niet.

De hele code staat in de head van de webpagina en die staat in wordpress in header.php.

De totale code in de head is:

<html><head> allerlei andere code…

<?php
$lat = 50.882; // Noorderbreedte
$long = 4.699; // oosterlengte
$offset = 1; // verschil tussen GMT en lokale tijd in uren

$buitenlicht=”x”;
if ((time() > date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset) )
&& (time() < date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset) )){
$buitenlicht=”licht”;}
else {
$buitenlicht=”donker”;
}
?>

<link rel=”stylesheet” type=”text/css” href=”<?php bloginfo(‘template_directory’); ?>/css/<?php echo($buitenlicht);?>.css” media=”screen” />

allerlei andere code…

</head><body>…

Bij een site zonder wordpres roep je de stylesheet aan met: 

<link rel=”stylesheet” type=”text/css” href=”pad van je stylesheet<?php echo($buitenlicht);?>.css” media=”screen” />

b.v. <link rel=”stylesheet” type=”text/css” href=”css/<?php echo($buitenlicht);?>.css” media=”screen” /> als de stylesheet in de css map van je site zit.

 

En de maan?

Dan vroeg ik me nog af of er misschien een standaard php functie voor de maan op en ondergang is… Nee daar is geen standaard functie voor, maar er is natuurlijk wel iemand die er een gemaakt heeft: Moon rise/set

 

 

 


3 Reacties op "PHP functie voor zonsopgang en zonsondergang"

  1. Merci, kende de functie nog niet en zoals Sigrid schreef kan ik zelf niet doen omdat ik lampen binnen schakel althans dan is dit makkelijker!
    Geweldig weer een extra systeem.
    Ik schrijf zelf de datum ook nog weg naar een txt file om te checken of ze de dag al aan/uit zijn gezet (2 bestanden een voor aan 1 voor uit) komt nog in een json file later. Zodat hij niet weer uit gaat als ik hem zelf aan heb gezet met mijn app of afstandsbediening :)

  2. Dat is een toepassing waaraan ik helemaal niet gedacht heb.

    Gebruik je PHP om je buitenverlichting aan te sturen? Je kan dat ook elektronisch doen met LDR (een licht gevoelige weerstand), zodra het donker wordt verandert de weerstand en dat gebruik je in je schakeling.

    Zie: http://nl.wikipedia.org/wiki/Lichtgevoelige_weerstand

    (Gewoon even naar de elektronica zaak (of feestwinkel zoals een collega het ooit noemde) en een LDR halen.)

  3. Dankjewel voor deze HELDERE uitleg! Ik ga met deze functie mijn buitenverlichting schakelen.

Reageer:




Heldere Ster | © 2010-2012 door +Sigrid de Jong, Alle rechten voorbehouden. |