Jump to content

Handige scripts uit 'html/php: site hulp'


Ewoud

Recommended Posts

$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: door marcootje
Link to comment
Delen op andere websites

  • Reacties 62
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Argon

    12

  • Donald F. Duck

    8

  • marcootje

    8

  • Woetsha

    8

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: door Donald F. Duck
Link to comment
Delen op andere websites

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 :7 Niks ten nadele van jou hoor marcootje, ik vind het juist goed dat je zoveel ervaring en kennis hebt. :tu:

Bewerkt: door K.O.
Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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: door marcootje
Link to comment
Delen op andere websites

  • 2 weken later...
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: door marcootje
Link to comment
Delen op andere websites

  • 5 maanden later...

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:

r89nh3.jpg

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?

Link to comment
Delen op andere websites

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...

Link to comment
Delen op andere websites

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" />

Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

[...]

@ 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: door Donald F. Duck
Link to comment
Delen op andere websites

[...]

@ 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

Link to comment
Delen op andere websites

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: door Donald F. Duck
Link to comment
Delen op andere websites

Gast
Dit onderwerp is gesloten.
  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.

×
×
  • Create New...