Was bringt mir das? Er weiß doch dann weder, welches Feld er umformatieren soll, noch, in welches Format? Ich denke mal, dass ich generell den Einsatz von Behaviors noch nicht verstanden habe. Kann mir da vielleicht jemand etwas auf die Sprünge helfen?
CTimestampBehavior ist für was anderes gedacht: Es ist bewährte Praxis, jeder Tabelle mit vielen dynamischen Daten 2 Timestamp-Spalten zu verpassen. Eine enthält den Zeitstempel wann der Eintrag angelegt wurde, die andere, wann er zuletzt aktualisiert wurde. Das Behavior setzt diese Werte automatisch jedesmal wenn ein Record angelegt/gespeichert wird.
Was du suchst ist evtl. eher sowas wie das i18n-datetime-behavior (extension). Die ist zwar schon etwas betagt, sollte aber immer noch tun .
Kurzgesagt kannst du mit Behaviors zusätzliche Methoden an deine Klassen anfügen. Manche Behaviors machen intensiven Gebrauch von Yii’s Event-System. Damit passieren dann manche Sachen automatisch. Das genannte CTimestampBehavior nutzt z.B. das “onBeforeSave” event, das jedesmal “abgefeuert” wird, kurz bevor ein Record geschrieben wird und setzt dann die 2 Spalten auf die entsprechenden Datumswerte.
ich speicher ein Datum immer im YYYY-MM-DD-Format und benutze das CMaskedTextField-Widget, wo ich im Format dd.mm.YYY eingeben lasse. Das heisst, ich wandel im beforeSave() nach YYYY-MM-DD um und im AfterFind() zurück
DATETIME speichert das Datum (in Kalendernotation und) ohne Zeitzonenkonvertierung ab.
TIMESTAMP konvertiert vor dem Speichern von der aktuellen Zeitzone nach UTC - und beim Auslesen wieder in die aktuelle Zeitzone zurueck.
Zur Speicherung von User Input ist daher DATETIME besser geeignet.
Jetzt kann man noch die Variante diskutieren ob man auf DATETIME setzt oder auf ein INT Feld um eine (von PHP erzeugte) Timestamp zu speichern. Ich kenne einige Projekte die letzteres tun.
Ich persoenlich ziehe DATETIME Felder vor, insbesondere weil man in der Datenbank direkt das Datum lesen kann ohne jedesmal Timestamps umrechnen zu muessen. Fehlersuche und schnellere, kleinere Korrekturen direkt in der DB gehen damit leichter von der Hand. Letzendes ist halt ein Datum fuer Mennschen intuitiver zu lesen als eine Timestamp…