Datumsangaben vor 1970 in TYPO3

Verdammt. Da habe ich mich wohl zu früh gefreut. Wie ich in einem früheren Artikel erwähnt hatte, kann TYPO3 bekanntlich keine Datumsangaben vor 1970 speichern. Das ist nicht gut, da ich z.B. für Geburtstage in meiner Extension eben solche Datumswerte benötige. Damals hatte ich geschrieben, dass ich anstatt des Datumsfeldes einfach ein String, advanced verwendet habe, und dies mittels 'eval' => 'date' in ein Datum umwandeln lasse. Dummerweise erzeugt auch dieses Vorgehen nur Daten ab 1970 🙁 Da habe ich wohl glatt den Test vergessen 😉

Naja, zumindest fiel mir das heute auf (bin gerade dabei alles fertig für den Upload ins TER zu machen) und das musste natürlich gefixt werden. Meine Lösung ist nun wie folgt. Da ich intern sowieso nur mit Timestamps rechne, brauchte ich nur die Eingabefelder auf String zu ändern und eine Funktion anzulegen, um diese in Timestamps umzuwandeln. Ersteres geht wie folgt in der Datei ext_tables.sql: CREATE TABLE fe_users ( tx_smemployeelist_birthday varchar(10) DEFAULT '1900-01-01' NOT NULL, tx_smemployeelist_firstentry varchar(10) DEFAULT '1900-01-01' NOT NULL );

Und meine Funktion zum Umwandeln der Strings in Timestamps sieht so aus (implementier als statische Methode meiner “Hilfsmittel-Klasse”):
/** * Converts a string of format YYYY-MM-DD into a UNIX timestamp. * * @param string Date string of format YYYY-MM-DD. * @return int UNIX timestamp for given date. */ public static function ConvertToTimestamp($date) { // check whether given string is of the right format $matches = array(); if (preg_match('/^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/', $date, $matches)) { return mktime(0, 0, 0, $matches[2], $matches[3], $matches[1]); } else { return 0; } }

Über Stefan

Polyglot Clean Code Developer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax