Подтвердить что ты не робот

OData: фильтр даты "Больше, чем"

Есть ли способ вернуть серию записей в OData, указав фильтр "Дата больше, чем xxxxx"... но используя ранее полученную дату с помощью фида OData?

Случай использования: Представьте, что я хочу создать веб-страницу, на которой отображается список последних завершенных онлайн-заказов. Это то, к чему я стремился:

  • Загрузите страницу
  • Анимируйте мою службу OData, возвращая последние 100 заказов (заказывая по дате спуска, чтобы сначала появился последний завершенный заказ)
  • Создайте HTML на странице с помощью данных OData​​li >
  • Сохранить дату MAX в глобальной переменной (выглядит так:/Дата (1338336000000)/)
  • Нажмите службу OData на 30-секундный интервал, но на этот раз укажите фильтр, чтобы возвращать только записи, где дата заказа больше предыдущей даты MAX. В этом случае:/Дата (1338336000000)/
  • Если какие-либо записи возвращены, создайте HTML для этих записей и добавьте элементы к ранее загруженным элементам.

Где я боюсь, указывается фильтр "Больше", чем "Дата". По какой-то причине фильтры даты в OData, похоже, не очень приятны с собственным исходным форматом даты OData. Нужно ли мне преобразовать дату, первоначально полученную в другой формат, который можно использовать для фильтрации?

Я хочу сделать что-то вроде этого:

[http://mydomain/Services/v001.svc/Orders?$filter=close_dt gt 1338336000000][1]

FYI: Я использую V2

4b9b3361

Ответ 1

Выяснил это.

OData V2 вне коробки возвращает даты SQL в формате JSON Date так:

/Date(1338282808000)/

Однако, чтобы использовать дату как фильтр в вызове OData, ваша дата должна быть в формате EDM, выглядящей так:

2012-05-29T09:13:28

Итак, мне нужно было получить дату из моего первоначального вызова OData, а затем преобразовать ее в формат EDM для использования в моих последующих вызовах OData, которые выглядят следующим образом:

/Services/v001.svc/Orders?$filter=close_dt gt DateTime'2012-05-29T09:13:28' 

В итоге я создал функцию javascript, которая выполняет форматирование switcharoo:

function convertJSONDate(jsonDate, returnFormat) {
        var myDate = new Date(jsonDate.match(/\d+/)[0] * 1);
        myDate.add(4).hours();  //using {date.format.js} to add time to compensate for timezone offset
        return myDate.format(returnFormat); //using {date.format.js} plugin to format :: EDM FORMAT='yyyy-MM-ddTHH:mm:ss'
    }

Несколько примечаний:

  • Формат JSON, похоже, не настроен на часовой пояс, поэтому возвращаемая дата не соответствует дате, которую я вижу в моей базе данных. Поэтому мне пришлось добавить время вручную, чтобы компенсировать (кто-то, пожалуйста, объясните это).
  • Я использую плагин date.format.js, который вы можете скачать здесь для форматирования даты и добавление времени.

Ответ 4

Если вы используете логику datetime, вы можете сделать lt или gt.

например.   ... mydomain/Services/v001.svc/Заказы? $filter = close_dt gt datetime'20141231 '