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

Topic summary

Shopify Admin APIのGraphQLで注文のcreated_atフィルタに日時を含めても、時刻が反映されず日付のみで判定される事象が報告。例では created_at:>2021-11-10T07:46:21Z の指定でも 2021-11-10T07:13:23Z が返っている。

最新の結論: 日時値はクオートで囲む必要がある。created_at:>‘2021-10-04T05:00:00Z’ のように指定すると、05:00以降が正しく抽出される。

クオートしない場合、日時は00:00(深夜)として扱われ、事実上「日付のみのフィルタ」になる。公式ドキュメントにも「Date values must be a string surrounded by quotes」と記載あり。

補足: 「:」が特殊文字であることがクエリ構文に影響している可能性が示唆。投稿には検証スクリーンショットが添付されているが、理解・再現はテキスト情報で可能。

結末: これは仕様に基づく動作で不具合ではない。対処法は日時をシングルまたはダブルクオートで囲むこと。議論は解決済み。

Summarized with AI on February 27. AI used: gpt-5.

注文情報を 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