Date's in PHP

Info 
Door: Grubolsch Moeilijkheidsgraad: 1/3
Views:15.395Reacties: 6(Bekijken)
  Log in om zelf te reageren
 Waardering:7/10 (4 stemmen)



Scripters hebben geen leven. Tijd maakt niet uit, PC's blijven aan. Maar de mensen die gebruik maken van hun scripts hebben dat wel. Die hebben graag dat overal, in elke hoek, ergens de tijd te lezen valt. Maakt niet uit wat voor tijd. Tijd van een gepost bericht, tijd om een pagina te laden, huidige tijd... tijd zat.

Wel opgelet voor de codevoorbeelden die gebruikt worden, er wordt vaak naar andere functies buiten het tijdpad gegrepen, wat basiskennis in PHP is dus wel vereist voor deze tutorial.

Date()


Voor het weergeven van tijd gaan we de functie date() in PHP gebruik. De functie date() gebruikt 2 variabelen. De eerst is welke tijdsinfo je terug wilt krijgen, dat kunnen meerdere variabelen zijn, en de tweede optionele functies, die de "timestamp", het moment van het bereken van de gevraagde tijd weergeeft. Zo kan je met deze optie de naam van de dag opvragen van 11 september 2001. Je kan dan een scriptje maken met... "dit rampzalige moment is ... uur geleden".

Formaatlijst
De formaten die je kan opvragen, en opmaken met tekst, comma's... outspacen is vereist voor letters die normaal een formaat opleveren, kan je hier lezen: (lijst van PHP.net)

a - "am" of "pm",
A - "AM" of "PM"
B - Swatch Internet time
d - dag van de maand, 2 cijfers met nullen aan het begin; dus "01" tot "31"
D - dag van de week, textueel, 3 letters; dus "Fri"
F - maand, textueel, lang; dus "January"
g - uur, 12-uur format zonder nullen aan het begin; dus "1" tot "12"
[/b]G[/b] - hour, 24-uur format zonder nullen aan het begin; dus "0" tot "23"
h - uur, 12-uur format; dus "01" to "12"
H - hour, 24-uur format; dus "00" tot "23"
i - minuten; dus "00" tot "59"
I (hoofdletter i) - "1" wanneer Daylight Savings Time, anders "0".
j - dag van de maand zonder nullen aan het begin; dus "1" tot "31"
l (kleine letter 'L') - dag van de week, textueel, lang; dus "Friday"
L - boolean voor wanneer het een schrikkeljaar is; dus "0" of "1"
m - maand; dus "01" tot "12"
M - maand, textueel, 3 letters; dus "Jan"
n - maand zonder nul aan het begin; dus "1" tot "12"
O - Verschil met Greenwich tijd in uren; bijvoorbeeld "+0200"
r - RFC 822 geformatteerde date; dus "Thu, 21 Dec 2000 16:01:07 +0200"
s - seconden; dus "00" tot "59"
S - Engelse ordinale suffix voor de dag van de maand, textueel, 2 karakters; dus "th", "nd"
t - aantal dagen in een gegeven maand; dus "28" tot "31"
T - Timezone setting van deze machine; dus "MDT"
U - seconden sinds epoch
w - dag van de week, numeriek, dus "0" (Zondag) tot "6" (Zaterdag)
W - ISO-8601 weeknummer van het jaar, weken beginnend op maandag (toegevoegd in PHP 4.1.0)
Y - jaar, 4 cijfers; dus "1999"
y - jaar, 2 cijfers; dus "99"
z - dag van het jaar; dus "0" tot "365"
Z - timezone offset in seconden (dus "-43200" tot "43200"). De offset voor timezones ten westen van UTC is altijd negatief, en voor het oosten van UTC altijd positief.

Voorbeeldje:
#Code
1
2
3
4
5
<?php
$datum = date("Het is G uur,a");
echo $datum;
//Geeft bv weer:  Het is 7 uur,am
?>

Je kan heel makkelijk met de functie strtr() de 7 in het woord zeven vervangen. Een -niet volledig- voorbeeld:

#Code
1
2
3
4
5
6
7
8
9
10
<?php
//array met vervangingen aanmaken (array is NIET volledig)
$letterlijst = array ("6" => "zes", "7" => "zeven", "8" => "acht");
$datum = date("Het is G uur,a");

//de strstr toepassen.
echo strtr($datum', $letterlijst);

//print bv: Het is zeven uur, am
?>


Time()


Aanvaart geen variabelen. Hiermee geef je de zogenaamde UNIX-timestamp, tijdszegel weer. Dat zijn het aantal seconden gemeten vanaf de 1ste van Januarie 1970 00:00:00 GMT.

Checkdate ()


Gebruikers moet je beschermen tegen hunzelf. Een oude webmasterwijsheid zegt inmers: "Gebruikers zijn als Geiten, ze doen altijd wat jij niet wilt dat ze doen.".
Een gregoriaanse timestamp kan je hiermee laten valideren, zoals in dit uittreksel van een scriptje, om te testen geven we het een voorgedefineerde var mee.
Merk op dat je moet werken met de volgorde maand, dag, jaar, zoals de Amerikanen dus (dank u meneer Struik). Deze functie houdt rekening met schrikkeljaren.

Voorbeeldje met een array van voorbeeldinputs:
#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
//voorbeeldinputs
$tijdstempel[0] = 05,10,1980
/$tijdstempel[1] = 05,13,19810

//de functie met checkdate erin.
function datum_nakijken ($datum)
{
    
if (!checkdate ($datum[0],$datum[1],$datum[2]))
    
{
        
echo "Verkeerde datuminput!<br>";
         
}
    
else
      
{
        
echo "Juiste datuminput!<br>";
       
}
}

//voor de mensen die de functie explode niet kennen, we scheiden alles door een teken, in dit geval comma. Dat teken zelf vervalt.
$datum = explode(",",$tijdstempel[0]);

//functie toepassen
datum_nakijken($datum)

//herhalen voor de tweede input
$datum = explode(",",$tijdstempel[1]);
datum_nakijken($datum)
?>


Localtime()


Een probleem dat voorkomt als je de tijd opvraagt, is dat de tijd van de SERVER is, niet de tijd van de user zijn PC. Voor internationale forums kan dit dan wel handig zijn, maar voor een locaal wielrennerforumpje is het een hel. De server van mijn host staat bv in new-york, terwijl ik site's voor het nederlandse taalgebied maak.
localtime() is (een) van de oplossingen. Het pakt de tijd van de user, niet die van de server. Localtime aanvaart twee argumenten, de timestamp en een 0 of 1. Bij de waarde 0 geeft localtime() zijn waarden als een nummerieke array, met 1 geeft het het terug als een assocatieve array. Deze functie werkt NIET voor alle servers. Test dit dus eerste even uit.

Formaat

tm_sec - seconden
tm_min - minuten
tm_hour - uren
tm_mday - dag van de maand
tm_mon - maand van het jaar
tm_year - Jaar, niet Y2K bestendig
tm_wday - Dag van de week
tm_yday - Dag van het jaar
tm_isdst - Is daylight savings time in werking

Microtime ()


Microtijd aanvaart geen argumenten. Het geeft het aantal seconden weer sinds het unix-would-be-imperium -net als time()-, en het aantal seconden sinds dat imperium. Het wordt vaak gebruikt om de laadtijd van je pagina's uit te rekenen, als in dit script: http://www.websitemaken.be/index.php?page=show_script&id=103[/URL]
Eigelijk geeft het dus twee variabelen weer -de tijdstamp en de seconden-, gescheiden met een spatie (makelijk te scheiden met een explode(" ",$var) dus!).

Andere ()


Andere is de functie die een string retourneerd, er geen aanvaard. http://be2.php.net/manual/nl/ref.datetime.php
Je implenteerd ze als volgt:

#Code
1
2
3
4
5
function andere()
{
    echo "<a href="http://be2.php.net/manual/nl/ref.datetime.php">http://be2.php.net/manual/nl/ref.datetime.php</a>";
}
andere();


Opdracht


De opdracht is erg simpel, omdat ik er eigelijk alleen te moeilijke kon bedenken.
Maak een skin voor s'ochtens en na de middag ;)
De skin s'ochtends heeft witte bg en zwarte letters,in de namiddag is het andersom. Gebruik ook een voorbeeldzin om de tekstkleur te testen.

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<?php
if (date(a) == "am")
{
    
$bg = "white";
    
$font = "black";
}
else
{
    
$bg = "black";
    
$font = "white";
}

echo "<head>
      <style>
      body {background-color: 
$bg;} 
      * {color: 
$font;};
      </style>
      <head/>
      </body>
    
";
?>
<p>We leerden vandaag over de datum in PHP!</p>    
</body>
</html>


Hoop dat jullie er iets aan hadden, commentaar mag altijd hier, maar stel grote vragen best in het forum! ;-)

6 reacties
Geplaatst op 15-09-2008 om 14:15
 

Regular
Allemaal mooi opgesteld en duidelijk uigelegd, maar de code bij checkdate() is toch behoorlijk buggy hoor!
- De waarden die toegekend worden aan $tijdstempel staan niet tussen quotes (regels 3 en 4)
- Een aantal regels wordt niet afgesloten met puntkomma (regels 3, 4, 23 en 27)
- Regel 4 begint met een slash (/)

Verder begrijp ik niet goed waarom de functie explode(...) niet mee in de userfunction werd opgenomen.
Tot slot vermoed ik dat de waarde die toegekend werd aan $tijdstempel[1] de bedoeling heeft om een 'Verkeerde datum!' te genereren. Dat gebeurt echter niet omdat geldige waarden voor jaartal lopen van 1 tot 32767.

Grubolsch Geplaatst op 06-12-2007 om 00:01
 

Moderator
Dat staat hier, je hebt de functie date() nodig. Staat er allemaal uitgelegd.
gozer7777777 Geplaatst op 01-12-2007 om 11:42
 

Regular
Ik heb een vraagje. Ik heb nu een variabele gemaakt door
time() Dit wil ik omzetten naar een datum bijv. 9 Feb 2007. Hoe doe ik dat?
Maximus Geplaatst op 27-06-2006 om 17:40
 

Regular
Ah, dat is vrij logisch eigenlijk. Dank je Mirax.
Mirax Geplaatst op 27-06-2006 om 14:12
 

Moderator
Het probleem is dat veel andere letters ook een betekenis hebben, dus je moet die of escape, of buiten de date halen. Dus bijvoorbeeld:
#Code
1
2
$datum = date("\H\e\t \i\s G \u\u\r a");
echo $datum;

Pagina 1 2 

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder