コツコツと

[Gmail API] 期間を指定してメールを検索する時の条件

July 01, 2020

Gmail API で期間を指定してメールを検索する場合の条件を紹介します。
期間は日付(年月日)、または UNIX 時間が指定できます。


期間に日付を指定する場合は、次のように条件を生成します。

after:2020/6/23 before:2020/6/26

// リクエストは次のようになります。
// qパラメータに検索条件をセットします。
https://www.googleapis.com/gmail/v1/users/me/messages?q=after:2020/6/11 before:2020/6/12

日付形式の条件の注意点は、日付が UTC(協定世界時)で解釈されることです。
日本標準時で考えると、2020/6/23 9:00 ~ 2020/6/26 9:00 まで に受信したメールを検索することになります。
日本標準時の 2020/6/23 00:00:00 ~ 2020/6/26 00:00:00 で検索したい場合は、 条件部を UNIX 時間で指定する必要があります。

次に、期間の条件部に UNIX 時間を指定する場合です。
この場合、秒単位の精度でメールを検索することができます。
下記は、2020/6/23 9:00:00 ~ 2020/6/26 18:00:00 (日本標準時)の期間で検索する例です。

after:1592870400 before:1593162000

ここで、UNIX 時間を JavaScript(Node.js)で求める方法を紹介します。
実行環境によってタイムゾーンが日本標準時でない場合があるので、ご注意ください。

// 2020/6/23 9:00:00をUNIX時間に変換する
> const time = new Date(2020, 5, 23, 9);
> const searchTime = Math.floor(time.getTime() / 1000);
> searchTime
1592870400

// time.toString()で日本標準時か確認できます
> time.toString();
'Tue Jun 23 2020 09:00:00 GMT+0900 (Japan Standard Time)'

// ちなみに、DateはUNIX時間(msec)でインスタンス化できます
> const example = new Date(1592870400 * 1000);
> example.toString();
'Tue Jun 23 2020 09:00:00 GMT+0900 (Japan Standard Time)'

参考情報


© 2020 jiri3