marcootje Geplaatst: 18 november 2008 Rapport Geplaatst: 18 november 2008 (bewerkt) $hour is wel een integer K.O. date() geeft dan wel een string terug, maar omdat er +9 bij staat force je hem naar een integer dus als je correct wilt werken doe je het zo: $hour=intval(date("H"))+9; if($hour >= 24) {$hour -= 24;} Maar omdat php nogal makkelijk doet met datatypes, kun je het ook op deze kortste manier doen: $hour=date("H")+9; if($hour >= 24) $hour -= 24; met evt. dat stukje voor die 0 ervoor, zodat het 09:00 wordt ipv 9:00 Daarvan zal ik ook ff de korste geven: if($hour < 10) $hour = "0".$hour; Dit moet je trouwens niet proberen bij striktere talen... die vallen er zeker wel over Maar als je met php werkt moet je niet moeilijk doen als het makkelijk kan Mvg, Marco Bewerkt: 18 november 2008 door marcootje
Donald F. Duck Geplaatst: 25 november 2008 Rapport Geplaatst: 25 november 2008 (bewerkt) Het is me al gelukt, nu een ander probleem (al opgelost) waar veel andere problemen aan hangen: Tussen 0:00 en 9:00 zie je nog de datum van de dag ervoor omdat de servertijd dan nog op de dag ervoor zit. Voorbeeld: Het is 25 november 8:35. Je ziet op de klok dan staan 24-11-2008 8:35. Dit is al opgelost, maar als het nu 1 december 8:35 is komt er 31-11-2008 8:35 te staan (30+1=31) i.p.v. 1-12-2008 8:35. Nu moet ik dus een maand erbij tellen en -28, -29, -30 of -31 doen bij de dagen. Ten eerste weet ik geen script ervoor, en ten tweede moet ik er ook nog eens achter komen of het een jaar is met 29 februari. Als dit opgelost is is er nog een probleem: Het is 1-1-2009 8:35. Dan staat er 1-13-2008 8:35. Dus moet de maand -12 en het jaar +1. Een lijst met alle problemen: dag te vroeg voor 9:00 Opgelost maand erbij op eind maand/schrikkeljaar controleren Niet opgelost jaar erbij op eind jaar Niet opgelost Bewerkt: 25 november 2008 door Donald F. Duck
K.O. Geplaatst: 25 november 2008 Rapport Geplaatst: 25 november 2008 (bewerkt) Ik heb een beter idee: heel dit PHP script laten zitten en JavaScript gebruiken. PHP is een server-side taal, terwijl JavaScript client-side is. Met PHP's date() functie haal je dus de tijd en datum van de server, maar met Javascript haal je de tijd en datum van de computerinstellingen van degene die jouw site probeer te bekijken. Dan hoef je dus helemaal niks om te rekenen. Ik weet niet precies hoe bekend je bent met JavaScript, maar misschien is dit handig om eens door te lezen. Edit: maar stel nou dat iemand in een andere tijdzone je site probeert te bekijken? Onwaarschijnlijk misschien, maar niet onmogelijk. Denk ik ook weer eens iets te weten, wordt het wéér onderuitgehaald Niks ten nadele van jou hoor marcootje, ik vind het juist goed dat je zoveel ervaring en kennis hebt. Bewerkt: 26 november 2008 door K.O.
marcootje Geplaatst: 25 november 2008 Rapport Geplaatst: 25 november 2008 Ik heb een beter idee: heel dit PHP script laten zitten en JavaScript gebruiken. PHP is een server-side taal, terwijl JavaScript client-side is. Met PHP's date() functie haal je dus de tijd en datum van de server, maar met Javascript haal je de tijd en datum van de computerinstellingen van degene die jouw site probeer te bekijken. Dan hoef je dus helemaal niks om te rekenen. Ik weet niet precies hoe bekend je bent met JavaScript, maar misschien is dit handig om eens door te lezen. Niet helemaal waar, kijk maar naar de tweede parameter van de functie date(), dat is de parameter timestamp HUH, maar wat is een timestamp dan? Een timestamp is ongeveer de meest populaire vorm om een datum op te slaan. Het is namelijk het aantal seconden sinds de unix epoch, 1 Januari 1970 01:00 (of zoiets) whatever, to the point: als je nou gewoon dit doet: date("Het formaat", time()+9*60*60); dan heb je de tijd, maar dan 9 uur erbij geteld (volgens mij wilde je dat of niet?) 9*60*60: 9 uur*60 minuten*60seconden, voor de duidelijkheid Ik hoop dat je hier wat aan hebt succes verder mvg Marco
Donald F. Duck Geplaatst: 25 november 2008 Rapport Geplaatst: 25 november 2008 Bij welke date() functie moet ik de time() functie dan neerzetten? Deze heb ik: $date=date("j"); $month=date("n"); $year=date("Y"); $hour=date("H"); $min=date("i");
marcootje Geplaatst: 25 november 2008 Rapport Geplaatst: 25 november 2008 (bewerkt) Bij welke date() functie moet ik de time() functie dan neerzetten? Deze heb ik: $date=date("j"); $month=date("n"); $year=date("Y"); $hour=date("H"); $min=date("i"); bij $date, $month, $year en $hour. minuten zou niets uit moeten maken als je het verder niet hoeft te bewerken kun je het ook zo doen he: $date=date("j-n-Y H:i", time()+9*60*60); succes mvg Marco Bewerkt: 25 november 2008 door marcootje
Donald F. Duck Geplaatst: 27 november 2008 Rapport Geplaatst: 27 november 2008 Bedankt, werkt perfect. dag te vroeg voor 9:00 Opgelost maand erbij op eind maand/schrikkeljaar controleren Opgelost jaar erbij op eind jaar Opgelost
marcootje Geplaatst: 9 december 2008 Rapport Geplaatst: 9 december 2008 (bewerkt) maar stel nou dat iemand in een andere tijdzone je site probeert te bekijken? Onwaarschijnlijk misschien, maar niet onmogelijk. Je kunt dmv verschillende functies erachter komen waarvandaan een aanvraag komt, de ene betrouwbaarder dan de andere. Als je de tijdzone daarbij kan verzinnen weet je hoeveel seconden je erbij moet optellen/eraf moet halen. Als je gasten laat registeren (kan overigens ook zonder registratie) kun je ze hun eigen tijdzone laten instellen, zodat je de tijden, ook dmv date() kunt aanpassen. een zelfde functie als date() is strftime(), maar die past de tijd automatisch aan aan de ingestelde tijdzone (vooraf bepaald dus, met setlocale() ) Nog meer weetjes Mvg Marco Bewerkt: 9 december 2008 door marcootje
Donald F. Duck Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 Ik heb nu mooi een scriptje via GD die je de huidige dag enz. laat zien: <?php function LoadCalendar() { $im = @imagecreatefrompng('blank.png'); $black = imagecolorallocate($im, 0, 0, 0); $txtcol = imagecolorallocate($im, 1, 1, 1); $white = imagecolorallocate($im, 255, 255, 255); $font = 'segoeui.ttf'; // Begin kalender \\ $dayn = date('w'); // dag (zaterdag, zondag, ...) $day = date('j'); // dag (1, 2, ...) $month = date('n'); // maand $year = date('Y'); // jaar $days = array('zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'); // dag omzetten $months = array('0','jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec'); // maand omzetten imagettftext($im, 20, 0, 50, 137, $txtcol, $font, $days[$dayn]); if ($day < 10) { imagettftext($im, 75, 0, 63, 220, $txtcol, $font, $day); } else { imagettftext($im, 75, 0, 10, 220, $txtcol, $font, $day); } imagettftext($im, 27, 0, 122, 173, $txtcol, $font, $months[$month]); imagettftext($im, 27, 0, 122, 215, $txtcol, $font, $year); imagecolortransparent($im, $black); // Eind kalender \\ // Kijken of het is mislukt if(!$im) { // Zo ja, maak een lege afbeelding $im = imagecreatetruecolor(150, 30); $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); // En laat een errortekst zien imagestring($im, 1, 5, 5, 'Error loading calendar', $tc); } return $im; } header('Content-Type: image/png'); $img = LoadCalendar(); imagepng($img); imagedestroy($img); ?> Voor vandaag krijg je dan: Ik wil nu deze kalender uitbreiden zodat je ook zelf een datum kan instellen voor die afbeelding, bijv. met <img src="calendar.php?day=8&month=6&year=2009" />, maar ook zonder enige variabelen waardoor je de huidige datum krijgt. Omdat ik ook zaterdag, zondag enz. in de kalender heb staan wil ik ook dat de dag automatisch wordt berekend aan de hand van de ingevulde datum (in mijn img voorbeeld dus maandag 8 juni 2009). Is dit mogelijk of moet ik het via een andere manier doen?
K.O. Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 Natuurlijk is dit mogelijk. Het is ongetwijfeld niet de meest optimale methode, maar zelf denk ik aan de strtotime() en de getdate() functies, die je misschien even kunt nazoeken op php.net. Maak een HTML formuliertje om de datum in te stellen en gebruik de GET-methode om de variabelen in de URL zichtbaar te krijgen. Dan doe je zoiets: if (isset($_GET['day']) && isset($_GET['month']) && isset($_GET['year'])) { $timestamp = strtotime($_GET['day'] . ' ' . $_GET['month'] . ' ' . $_GET['year']); $date = getdate($timestamp); } else { $date = getdate(); } $dayn = $date['weekday']; $day = $date['mday']; //...etc...
Donald F. Duck Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 Hoe krijg ik dit in mijn script verwerkt? Mijn doel is: <img src="calendar.php?day=8&month=8&year=2009" /> Of, als ik de echte datum wil hebben: <img src="calendar.php" />
marcootje Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 @rakker126: zie Thundercover's reactie... .....@ rakker126: Volgens mij heb je niet speciale ondersteuning nodig. @ eend: gewoon zo'n url (calendar.php?day=8&month=8&year=2009) meegeven inderdaad, en dan bij // Begin kalender \\ het volgende, voor alle data: if(isset($_GET['day'])) $day = $_GET['day']; else $day = date('j'); let op: niet getest
Donald F. Duck Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 (bewerkt) [...]@ eend: gewoon zo'n url (calendar.php?day=8&month=8&year=2009) meegeven inderdaad, en dan bij // Begin kalender \\ het volgende, voor alle data: if(isset($_GET['day'])) $day = $_GET['day']; else $day = date('j'); let op: niet getest Ok, is er nu ook een manier om vanuit de datum die je hebt ingevoerd de dag (zaterdag, zondag, enz.) te berekenen? Edit: Dit werkt dus niet, ik heb mijn variabelen verandert naar: $dayn = date('w'); // dag (zaterdag, zondag, ...) if (isset($_GET['day'])) { // als dag is ingesteld in de link... $day = $_GET['day'])); // ...dan wordt die dag de variabel } else { // is dit niet zo... $day = date('j'); // ...dan berekenen we de huidige dag } if (isset($_GET['month'])) { // als maand is ingesteld in de link... $month = $_GET['month')); // ...dan wordt die maand de variabel } else { // is dit niet zo... $month = date('n'); // ...dan berekenen we de huidige maand } if (isset($_GET['year'])) { // als jaar is ingesteld in de link... $year = $_GET['year'])); // ...dan wordt dat jaar de variabel } else { // is dit niet zo... $year = date('Y'); // dan berekenen we het huidige jaar } Het enige dat-ie dan geeft is een wit vak met een rood kruisje. Maak ik de goede regels comment (dus alles hiervan op de date-defines na), werkt het script gewoon. Bewerkt: 6 juni 2009 door Donald F. Duck
marcootje Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 [...]@ eend: gewoon zo'n url (calendar.php?day=8&month=8&year=2009) meegeven inderdaad, en dan bij // Begin kalender \\ het volgende, voor alle data: if(isset($_GET['day'])) $day = $_GET['day']; else $day = date('j'); let op: niet getest Ok, is er nu ook een manier om vanuit de datum die je hebt ingevoerd de dag (zaterdag, zondag, enz.) te berekenen? Edit: Dit werkt dus niet, ik heb mijn variabelen verandert naar: $dayn = date('w'); // dag (zaterdag, zondag, ...) if (isset($_GET['day'])) { // als dag is ingesteld in de link... $day = $_GET['day'])); // ...dan wordt die dag de variabel } else { // is dit niet zo... $day = date('j'); // ...dan berekenen we de huidige dag } if (isset($_GET['month'])) { // als maand is ingesteld in de link... $month = $_GET['month')); // ...dan wordt die maand de variabel } else { // is dit niet zo... $month = date('n'); // ...dan berekenen we de huidige maand } if (isset($_GET['year'])) { // als jaar is ingesteld in de link... $year = $_GET['year'])); // ...dan wordt dat jaar de variabel } else { // is dit niet zo... $year = date('Y'); // dan berekenen we het huidige jaar } Het enige dat-ie dan geeft is een wit vak met een rood kruisje. Maak ik de goede regels comment (dus alles hiervan op de date-defines na), werkt het script gewoon. als je in de broncode van het plaatje kijkt zul je foutmeldingen vinden, door deze regels: $month = $_GET['month')); die )) moet ] worden, bij elk de dag, maand, en jaar ook $dayn moet je trouwens van de GET-variabele dag af laten hangen
Donald F. Duck Geplaatst: 6 juni 2009 Rapport Geplaatst: 6 juni 2009 (bewerkt) Aha, soms verwar ik me met {[( )]}. Maar hoe kan ik de $dayn van de day af laten hangen? Voor de rest werkt het script volledig. Ook handig is dat als je bijv. iets elke maand doet op bijv. de 5e, hoef je alleen maar 5 in te vullen en dan wordt alleen de huidige maand/jaar uitgerekend. Bewerkt: 6 juni 2009 door Donald F. Duck
Recommended Posts