Datums en tijden opslaan in een MySQL database

Er zijn verschillende manieren om datums op te slaan in een MySQL database. Je kunt een Unix tijd als integer opslaan of gebruiken maken van het DATETIME datatype. Unix tijd is het aantal seconden geteld sinds 1 januari 1970 middernacht. DATETIME wordt verkregen en ingegeven in het formaat YYYY-MM-DD HH:MM:SS.

Beide manieren hebben zo hun voor- en nadelen. Wil je eerdere datums dan 1 januari 1970 opslaan, zal je DATETIME moeten gebruiken. DATETIME ondersteund datums vanaf '1000-01-01 00:00:00' tot '9999-12-31 23:59:59'. Het voordeel van de "integer methode" is de snelle werking. Je kan rechtstreeks php functies op de tijdinteger laten werken, zonder eerst nog een mktime() functie te hoeven gebruiken om van de, uit de MySQL database verkregen, leesbare datum een werkbare datum - Unix time - te maken. Je kan via SQL kiezen om een unix tijd te retourneren op volgende manier:

SELECT UNIX_TIMESTAMP( date ) AS unix_date FROM blog;

Dit is vooral handig als je een datum wilt formatteren met date() met maandnamen in je eigen taal. PHP kan in verschillende talen datums weergeven, MySQL alleen in het Engels.

MySQL heeft enkele datum en tijd functies om op je DATETIME velden los te laten. Deze hebben als voordeel dat je met al geoptimaliseerde data kunt werken in je php code.

Een voorbeeld: Verkrijg een overzicht van welke maanden er in je tabel zitten en formatteer ze als "Month name Year".

mysql> SELECT DATE_FORMAT( date, '%M %Y' )
    -> FROM blog
    -> GROUP BY YEAR( date ) , MONTH( date );
+------------------------------+
| DATE_FORMAT( date, '%M %Y' ) |
+------------------------------+
|                              |
| July 1949                    |
| March 1995                   |
| February 2006                |
| July 2006                    |
+------------------------------+

Iets wat misschien minder belangrijk is maar waar je toch in sommige gevallen op moet letten, de tijdszone. MySQL ondersteund op dit moment jammer genoeg nog geen mogelijkheid om de tijdszone mee op te slaan in je database. Wel heeft MySQL enkele functies voorzien die al wat hulp bieden.

Voorbeeld: Converteer een tijd van de ene tijdzone naar de andere

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
    -> '2004-01-01 22:00:00'

Wil je rekening houden met tijdszones kan je best een veld bijmaken waar je de UTC of de tijdszone in opslaat. Met UTC_TIME() kan je de Greenwich mean time verkrijgen.

Als je site op meerdere webservers draait en je een datum via de php functie time() stockeerd kunnen er problemen kunnen ontstaan als beide servers een andere tijd ingesteld hebben. Als je MySQL database op 1 server draait is het verstandiger om je datums via een MySQL functie (bijvoorbeeld NOW()) op te slaan.

Update: Op Scriptorama is er een artikel verschenen met nog enkele voorbeelden hoe je kunt werken met datums.

Meer informatie vind je op:

Gepost: 27 juli 2006 17u17 | 1 reacties


Screenreader css

Onlangs las ik een artikel over toegankelijkheid op het web. Hierin wordt er verwezen naar een plug-in voor Firefox (Fangs) om een screenreader na te bootsen.

Aangezien ik 99% van de tijd met Opera werk zou het handiger zijn dat de plugin hiermee werkte. Gelukkig heb je in Opera geen plugins nodig om leuke dingen te doen. Ik heb een css bestandje geschreven en die bij de user css van Opera geplaats. Deze doet bijna hetzelfde als de Fangs plugin.

Geïnteresseerden kunnen de screenreader css gebruiken. Informatie en een voorbeeld van de screenreader css

Gepost: 17 juli 2006 21u09 | 0 reacties


Pukkelpop 2006

Vrijdag ben ik om mijn combiticket geweest voor Pukkelpop 2006. Aangezien de site van Pukkelpop (op dit moment) geen planner aanbiedt zoals de Rock Werchter site, heb ik snel een eigen scriptje geschreven om mijn voorkeuren op aan te duiden. Het resultaat ervan zijn lijstjes van de 3 dagen.

Niet alle groepen die ik heb aangeduid ken ik, sommige ken ik gewoon van naam. Is er iets dat ik zeker moet gaan bekijken en nog niet heb aangeduid, laat het me weten!

Update: Sinds gisteren is het mogelijk om, net als vorig jaar, op de site een planning op te stellen en af te printen.
Leuk is dat je suggesties kunt krijgen welke groepen bij je passen a.d.h.v. je favoriete muziekgenre(s).

Update: De lijst is nu ook afprintbaar met je eigen voorkeuren (klik een paar keer op de groep om het kleur te veranderen)(O en sorry maar de zin het ook nog in IE te laten werken ontbrak me totaal). Nog 2 dagen en het is zo ver. Laten we onze vingers gekruist houden dat het toch nog mooi weer wordt!

Gepost: 16 juli 2006 13u40 | 0 reacties


Sannoise v0.3

Wat is er veranderd:

  • Blogcommmentaren zijn mogelijk
  • CSS is wat verbeterd
  • Admin sectie is verhuisd
  • Gebruik van templates
  • Info pagina's samengevoegd en hernoemd naar Over
  • Blogposts worden niet langer met bbcode gedaan maar in xhtml
  • Encodering is nu utf-8 (blijkbaar was dit al standaard in de db, bravo serveradmins)
  • xhtml 1.0 strict ipv xhtml 1.1: zodat niemand kan zagen dat content-type: text/html niet (helemaal) valid is voor xhtml1.1.

Hopelijk blijven de spammers weg want momenteel zijn er nog geen CAPTCHA's bij de blogcommentaren.

Nu ga ik mijn klasses functies en gans de bataclan wat ordenen, compacter en overzichtelijker maken. 2e prioriteit is om een atom en rss feed aan te bieden (zou niet zo veel werk mogen zijn).

Update op 2006-07-31: Spam comments begonnen de kop op te steken dus zijn de captchas toegevoegd, css is wat aangepast om doorlopende tekst wat leesbaarder te maken en er is nu een minimale print css bijgekomen.

Gepost: 5 juli 2006 23u30 | 0 reacties