2010-12-13 13 views
1

Ich habe ein Datum im Format TT-MM-JJJJ gespeichert. Ich möchte den Tag, das Datum und das Jahr als einzelne Variablen speichern, während alle führenden Nullen losgelassen werden (z. B. "09-09-2010" wird als 9, 9, 2010 gespeichert).Parsing eines Datums in ColdFusion

Ich habe versucht, den Code auf this page zu verwenden, um das Datum durch Bindestriche zu teilen, aber es wirft Ausdruckfehler.

Antwort

6

Einige Leute, wenn sie mit einem Problem konfrontiert, denken: „Ich weiß, ich werde reguläre Ausdrücke verwenden.“ Jetzt haben sie zwei Probleme.

Coding Horror: Regular Expressions: Now You Have Two Problems

das Coldfusion-Funktionen month (Datum) untersuchen, day (Datum) und year (Datum).

Aktualisieren: Sie können eine Zeichenfolge an diese Funktionen übergeben, solange CF in ein Datum umgewandelt werden kann.

2

Wenn Sie sagen, dass Sie ein Datum haben

dd-mm-yyyy im Format gespeichert

sind Sie sicher, dass Sie verwirren nicht mit der Art und Weise, dass Ihre UI-Datenbank es Ihnen präsentieren oder speichern Sie das Datum tatsächlich in diesem Format (indem Sie es beispielsweise in eine Textdatei oder eine Varchar-Spalte anstelle einer DateTime-Spalte schreiben)?

Der Grund warum ich frage ist, dass, wenn ein Datum in einer Datenbank als Datum gespeichert wird, CF es als Datum darstellt, unabhängig davon, wie es zB in SQL Management Studio erscheint. Wenn dies der Fall ist, können Sie die Teile einfach mit DatePart ("datepart", "date") trennen. Wenn Sie ein Datum in einem Textformat haben (z. B. aus einer Formularübergabe oder weil es als einfacher Text gespeichert wurde), sollten Sie es in der Lage sein, es mit LSParseDateTime() in ein DateTime-Objekt zu analysieren und dann das DatePart (...) Methode, um die Teile zu trennen.

Siehe http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_c-d_30.html

(sorry, kann die URL in der anderen Funktion Post wegen des Mangels an SO Punkten!)

für die Dokumentation zu diesem Thema.

Wenn Sie SQL2005 (oder höher) verwenden, können Sie berechnete Spalten im Datumsfeld erstellen, um Tag, Jahr und Monat auf Datenbankebene zu teilen. Ich dachte, ich würde das erwähnen, nur für den Fall, dass es sich als nützlich erweist.

Steve

+0

+1 fair genug, datepart() war die andere Möglichkeit, die ich in Betracht gezogen hatte.Ich vermute, das Problem des Fragestellers ist eine Ungewohnheit mit CF und dass es eine beträchtliche Anzahl von eingebauten Datumsmanipulationsfunktionen hat - daher der Regex-Ansatz. – orangepips

0

Wenn Sie mit einem String in diesem Format arbeiten, gibt es keine Notwendigkeit für reguläre Ausdrücke.

myDate = "13-12-2010"; 
theDay = listGetAt(myDate,1,"-"); 
theMonth = listGetAt(myDate,2,"-"); 
theYear = listGetAt(myDate,3,"-"); 

die val() Funktion können auch führende Nullen fallen, falls vorhanden.