Возврат объекта Date в JSON с использованием определенного формата

Я использую CF11 с ORM и сервисным уровнем для возврата объектов ORM. Мое приложение Angular требует, чтобы даты JSON возвращались в одном из двух следующих форматов:

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

Моя служба CFC возвращает массив объектов в виде строки JSON, но Coldfusion сериализует даты в строковом формате, например: April, 21 2016 04:45:56. Похоже, это результат функции SerializeJson(), которая вызывается под капотом.

Есть ли способ заставить ORM CFC возвращать объект даты в определенном строковом формате JSON? В качестве обходного пути я создал новое свойство с именем startTimeAsJson, которое возвращает строку с помощью функции получения. Но я бы предпочел найти способ, чтобы CF просто сериализовал объект даты в нужном мне формате.

Вот мой объект ORM.

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

Мой объект сервисного уровня.

component output="false" hint="CFBuilder-Generated:test_date" 
{
  remote orm.course[] function getAllCourses(string SortColumn = "STARTDATE DESC")
    {
        return entityLoad("course", {}, arguments.sortcolumn);
    }
}

Пример JSON, возвращаемый моей службой CFC.

[{"startTime":"May, 09 2016 08:25:24"}]

person Sam M    schedule 21.06.2016    source источник
comment
CF11+ поддерживает пользовательский сериализатор. Взгляните на документы.   -  person Alex    schedule 21.06.2016
comment
@Alex - Если вы знакомы с пользовательскими сериализаторами, вы должны написать это как ответ вместе с примером. Это было бы полезно для других, поскольку это действительно единственный вариант (кроме возврата строки, как они уже делают).   -  person Leigh    schedule 21.06.2016
comment
@Leigh Нет, лично я вообще не полагаюсь на сериализацию CF. Я просто случайно узнал, как предполагается настраивать интегрированные веб-сервисы CF. Просто давая подсказку, как с этим бороться, поэтому комментарий.   -  person Alex    schedule 21.06.2016
comment
@Alex - Хех, нас двое. Я только просмотрел документы, но кажется, что это может быть больше проблем, чем того стоит для одного поля. Если только вы не можете сделать что-то универсальное и многоразовое.   -  person Leigh    schedule 21.06.2016
comment
@Alex - пользовательский сериализатор сделал свое дело. Но, прочитав об опыте его использования нескольких известных блоггеров CF, я не уверен, что хочу продолжать идти по этому пути. Кажется, что его реализация все еще отсутствует. Ну что ж. Временная проблема решена, переходим к лучшему.   -  person Sam M    schedule 28.06.2016
comment
@SamM, возможно, стоит опубликовать здесь свое решение для будущих прохожих.   -  person Sajjan Sarkar    schedule 29.06.2016
comment
Один из вас, ребята, должен опубликовать окончательный код в качестве ответа, чтобы закрыть ветку и помочь следующему парню :)   -  person Leigh    schedule 07.07.2016
comment
Я планирую опубликовать код, но хочу отдать должное @Alex, так как его предложение привело меня туда, где мне нужно. Алекс, если вы опубликуете свое предложение использовать пользовательский сериализатор в качестве ответа, я отмечу его как принятое, а затем опубликую свой код в качестве другого ответа.   -  person Sam M    schedule 08.07.2016
comment
Просто опубликуйте свой ответ и отметьте его. Не нужно отдельно цитировать мое предложение. Речь идет о решении проблемы, а не о раздаче виртуальных баллов людям. ;)   -  person Alex    schedule 08.07.2016
comment
Ответ/решение было бы отличным... @SamM   -  person Pete    schedule 28.09.2017


Ответы (1)


Можете ли вы использовать CF dateTimeFormat() для форматирования даты, как вы хотите, прежде чем возвращать значение? http://cfdocs.org/datetimeformat
Что-то вроде...

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

Или, в одной строке:

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