Shopify Admin API (GraphQL) の日時によるフィルタリングの仕様について

注文情報を Shopify Admin API (GraphQL) で取得する実装をしているのですが、 query オプションによるフィルタリングで created_at を指定しているのですが、「日付」によるフィルタリングはされますが、「時刻」によるフィルタリングがされないようです。

例えば以下のような Query を実行した場合:

{> orders(first: 10, query: “created_at:>2021-11-10T07:46:21Z”) {> edges {> node {> createdAt> }> }> }> }

以下の結果が返ってきました:

{> “data”: {> “orders”: {> “edges”: [> {> “node”: {> “createdAt”: “2021-11-10T07:13:23Z”> }> },> {> “node”: {> “createdAt”: “2021-11-10T07:48:24Z”> }> }> ]> }> }> }

created_at:>2021-11-10T07:46:21Z を指定しているので 2021-11-10T07:13:23Z の結果は除外しかったのですが、結果には含まれてしまっています。

日付の部分を created_at:>2021-11-11T00:00:00Z とすると除外されるので「日付」では有効なようです。

この振る舞いについて特にドキュメントでは解説されていなかったようなのですが、不具合なのか仕様なのか、ご存じの方がおられたら教えて頂きたいです。

1 Like

質問者の佐藤さんとは同僚ですが、引っかかる方が多そうなのでここで回答します :slightly_smiling_face:

正しく抽出するためには、日時部分にクオートが必要です。例えば、“created_at:>‘2021-10-04T05:00:00Z’” のような指定をすれば、5時以降のものが正しく抽出されます。

日時部分をクオートせずに “created_at:>2021-10-04T05:00:00Z” のように指定すると、質問のとおり0時として扱われてしまうようです。

詳しい説明はありませんが、ドキュメントにも一応「Date value はクオートしろ」と書かれています。

Any name, or any quoted string (single or double quotes are both permitted). Date values must be a string surrounded by quotes.

「:」が特殊文字扱いになっている関係かもしれません。

3 Likes