2013-01-17 17 views
24

「xxxxxより大きい日付」フィルタを指定してODataの一連のレコードを返す方法はありますか?以前はODataフィードから取得した日付を使用していましたか?OData:日付「より大きい」フィルタ

使用例:最後に完了したオンライン注文のリストを表示するWebページを作成したいとします。これは私が目指してるものです:(最も最近完了した注文が最初に表示されるように日付の降順で順序付け)ページ

  • は最後の100件の注文を返す、非同期に私のODataサービスをヒット

    1. ロード
    2. は、グローバル変数にストアMAX日
    3. ODataのデータを使用して、ページ上のHTMLを構築する(次のようになります/日(13383.36億)/)
    4. は、30秒間隔でのODataサービスをヒットが、今回のように指定注文日が以前のMよりも大きいレコードのみを返すフィルタAX日付。この場合、次のようになります。/ Date(1338336000000)/
    5. レコードが返された場合は、それらのレコードのHTMLを作成し、以前に読み込まれたアイテムの前に追加します。

    ここで苦労しているのは、「より大きい」日付フィルタを指定することです。何らかの理由で、ODataの日付フィルタは、OData独自の日付形式ではうまく動作しないようです。最初に取得した日付をフィルタリングに使用できる別の形式に変換する必要がありますか?

    は、私はこのような何かをしたい:

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

    をFYI:私はこれを考え出しV2

  • +0

    有効なリンクではありません。 –

    +1

    @Rachel私は知っている...私は必要なものを行うための正しい構文を求めています。実際のリンクは無関係です。 – lamarant

    答えて

    31

    を使用しています。

    /Date(1338282808000)/ 
    

    しかし、ODataのコール内でフィルタとして日付を使用するためには、あなたの日付を:

    のOData V2すぐにはそうのようなJSONの日付形式でSQLのうちの日付を返します

    EDM形式にしておく必要があり、このように見える:だから

    2012-05-29T09:13:28 
    

    、私はその後のように見える私のその後のODataの呼び出しに使用するためEDM形式に変換、私の最初のOData呼び出しから日付を取得するために必要なこれは:

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

    私は、フォーマットswitcharooを行うJavaScript関数を作成することになった:ノートの

    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プラグインを使用しています。hereをダウンロードすると、日付の書式設定や追加に使用できます。
    +0

    元の日付はUTCであるため、常にGMTタイムゾーンで表されます。したがって、JavaScriptのローカル日付操作は、エラーの原因となるタイムゾーンに日付を暗黙的に解析します。 – FlavorScape

    +0

    私の場合、Oatingo V2に基づいて実装されたODate V2では、関数名は "DateTime"ではなく "datetime"でなければなりません。 – wangf

    0

    datetimeロジックを使用する場合は、ltまたはgtを使用できます。

    ODataのV4日フィルタリング形式で ... MYDOMAIN /サービス/ v001.svc /受注?$フィルタ= close_dt GT datetime'20141231'

    +0

    私はダッシュなしで動作させることはありません。 –

    関連する問題