2016-06-21 18 views
4

Ich verwende CF11 mit ORM und Service-Layer, um ORM-Objekte zurückzugeben. Meine Angular App erfordert, dass JSON Daten in einem der beiden folgenden Formate zurückgegeben werden:Rückgabe eines Date-Objekts in JSON mit einem bestimmten Format

'yyyy/MM/dd' (i.e., '2014/08/25') 
'yyyy/MM/dd HH:mm:ss' (i.e., '2014/08/25 16:35:10') 

Mein Service CFC gibt ein Array von Objekten als JSON-String, aber Coldfusion serialisiert die Daten in einem String-Format wie folgt aus: April, 21 2016 04:45:56 . Dies scheint ein Ergebnis der SerializeJson() - Funktion zu sein, die unter der Haube aufgerufen wird.

Gibt es eine Möglichkeit, einen ORM-CFC ein Datumsobjekt in einem bestimmten JSON-String-Format zurückgeben zu lassen? Als Workaround habe ich eine neue Eigenschaft namens startTimeAsJson erstellt, die eine Zeichenfolge mit einer Getter-Funktion zurückgibt. Aber ich würde lieber einen Weg finden, CF zu haben, einfach das Datumsobjekt mit dem gewünschten Format zu serialisieren.

Hier ist mein ORM-Objekt.

component persistent="true" table="course" accessors="true" 
{ 
    property name="startTime" column="start_time" type="date" ormtype="timestamp" notnull="false"; 
} 

Mein Dienstschichtobjekt.

Ein Beispiel für die JSON von meinem Dienst CFC zurückgegeben.

+1

CF11 + unterstützt benutzerdefinierte Serializer. Sehen Sie sich die Dokumentation an. – Alex

+1

@Alex - Wenn Sie mit benutzerdefinierten Serialisierern vertraut sind, sollten Sie dies zusammen mit einem Beispiel als Antwort schreiben. Das wäre für andere hilfreich, da es wirklich die einzige Option ist (abgesehen davon, dass sie einen String zurückgeben, wie sie es bereits tun). – Leigh

+0

@Leigh Nein, ich persönlich verlasse mich überhaupt nicht auf die Serialisierung von CF. Ich weiß nur zufällig, dass man die integrierten Webservices von CF anpassen soll. Ich gebe nur einen Hinweis, wie ich damit umgehen soll, also ein Kommentar. – Alex

Antwort

0

Können Sie CF's dateTimeFormat() verwenden, um das Datum wie gewünscht zu formatieren, bevor Sie den Wert zurückgeben? wie http://cfdocs.org/datetimeformat
Etwas ...

local.response = entityLoad("course", {}, arguments.sortcolumn); 
local.response = dateTimeFormat(local.response, "yyyy/mm/dd HH:nn:ss"); 
return local.response; 

Oder in einer Zeile:

return dateTimeFormat(entityLoad("course", {}, arguments.sortcolumn), "yyyy/mm/dd HH:nn:ss");