Existe-t-il un moyen de renvoyer une série d'enregistrements dans OData en spécifiant un filtre "Date supérieure à xxxxx" ... mais en utilisant une date précédemment obtenue à partir d'un flux OData?
Cas d'utilisation: / Imaginez que je souhaite créer une page Web affichant la liste des dernières commandes en ligne terminées. C'est ce que je vise:
Là où je me bats, c’est de spécifier le filtre Date "supérieur à". Pour une raison quelconque, les filtres de date dans OData ne semblent pas jouer très bien avec le format de date natif d'OData. Dois-je convertir la date obtenue à l'origine dans un format différent pouvant être utilisé pour le filtrage?
Je veux faire quelque chose comme ça:
[http://mydomain/Services/v001.svc/Orders?$filter=close_dt gt 1338336000000][1]
FYI: J'utilise V2
Compris ça.
OData V2 out-of-the-box retourne les dates hors SQL au format de date JSON comme suit:
/Date(1338282808000)/
Cependant, pour utiliser une date en tant que filtre dans un appel OData, votre date doit être au format EDM, ressemblant à ceci:
2012-05-29T09:13:28
Je devais donc obtenir la date de mon appel OData initial, puis le convertir au format EDM pour l'utiliser dans mes appels OData suivants, qui ressemblent à ceci:
/Services/v001.svc/Orders?$filter=close_dt gt DateTime'2012-05-29T09:13:28'
J'ai fini par créer une fonction javascript qui effectue le formatage:
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'
}
Quelques notes:
Dans OData V4, le format de filtrage de la date a été remplacé par $filter=close_dt gt 2006-12-30T23:59:59.99Z
Par exemple
Pour les versions précédentes d'OData, voir les réponses précédentes.
Juste un FYI: dans la V3 du protocole, le format de date/heure non basé sur les ticks est maintenant le format par défaut:
..."ReleaseDate": "1992-01-01T00: 00: 00" ...
Si vous utilisez la logique datetime, vous pouvez utiliser lt ou gt.
par exemple. ... mydomain/Services/v001.svc/Orders? $ filter = close_dt gt datetime'20141231 '