- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-29-2024 12:34 AM
コミュニティの皆様
申請テーブルを作成し、申請日時(日付/時刻)フィールドの値が、
現在の日付の3日以前のものをフィルターして表示させようとしております。
申請日時が3日以前のレコードをいくつか用意し、
添付画像2のように、フィルターを設定してみたところ、
3日前の条件に当てはまるはずのものが、抽出されておりませんでした。
画像1.10/29の15:00に、3日前の10/26のレコードをいくつか用意
画像2.フィルター条件を以下のように設定
どうやら、10/29の15:00にフィルターした場合、
10/26の15:01以降は3日前として判定されないようです。
日付のみを見て3日前と判定してほしいのですが、
こちらをフィルターする方法がわかりません。
何か良い方法があれば、ご教示いただけますと幸いです。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-31-2024 07:05 PM - 編集済み 10-31-2024 07:18 PM
ユーザーのタイムゾーンとシステムのタイムゾーンを混同しないように注意してくださいね。
ユーザープリファレンス・ユーザー設定のタイムゾーンは自由に変えて問題ありません。ユーザーの必要なタイムゾーンしてください。
そして検索もユーザーのタイムゾーンに合わせて3日間を判定できるように作られています。
リストビューはユーザーのタイムゾーンで表示されています。
ServiceNowの内部は標準時間になっています。ユーザーのタイムゾーンから変換して検索してくれています。
私が紹介したScriptを使えば、ユーザーのタイムゾーン 日本時間で何日前なのかを処理できます。そのため、システムが標準時間であっても、この方法なら、日本時間の3日間の判定が正しく出来ます。
少し難しいですが日本時間に設定したユーザーと、別のタイムゾーンのユーザーでは、リストビューの時間が変わりますし、3日間の区切りの時間も変わります。ユーザーのタイムゾーンなのでそう言うものです。
Docs GlideSystem - グローバル
GlideSystem - daysAgoEnd(数値 days) 指定された日数前の 1 日の終わりの日時を返します。
GlideSystem - daysAgoStart(数値 days) 指定された日数前の 1 日の始まりの日時を返します。
Scriptは難しいと言うことであれば、7日の選択肢はあるので、3日よりは少々多いですが、運用的に許されるなら7日することが簡単です。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-30-2024 05:02 PM - 編集済み 10-30-2024 06:16 PM
@U3D4 原因が分かったと思います。
ServiceNowはDateTimeをGMTタイムゾーンで登録しています。
自分のプロフィールからタイムゾーンをGMTに設定して見てください。3日前又は72時間前でフィルタすると3日前のレコードが表示されます。
システムのタイムゾーンをAsia/Tokyoに変更することもできますが、推奨されていません。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-30-2024 06:27 PM
一応次のスクリプト-バックグラウンドで抽出することができます。
var tz = gs.getSession().getTimeZone();
var gdt = new GlideDateTime();
var today = gdt.getLocalDate();
gdt = new GlideDateTime(today + ' 15:00:00'); // GMT時間 24:00 - 9:00
gdt.setTZ(tz);
gdt.addDays(-3);
var gr = new GlideRecord('<テーブル名>');
gr.orderBy('<日付時刻フィールド名>');
gr.addQuery('<日付時刻フィールド名>', '<', gdt);
gr.query();
while (gr.next()) {
gs.print(gr.<日付時刻フィールド名> + " " + gr.<日付フィールド名>.getDisplayValue());
}
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-31-2024 06:47 PM
>システムのタイムゾーンをAsia/Tokyoに変更することもできますが、推奨されていません。
タイムゾーンをAsia/Tokyoに変更することは非推奨なのですね。。
開発環境のタイムゾーンはAsia/Tokyoとなっており、複数のプロジェクトでこちらの設定を使用しているため、タイムゾーンを変更することはできそうにありません。。
(こちらの環境に合わせて、私のPDIの設定もタイムゾーンはAsia/Tokyoにしておりました。)
フィルタリングを正しく使用するためには、GMTにする他なさそうなので、別の手法を考えてみます。

- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-01-2024 09:37 PM - 編集済み 11-03-2024 01:31 AM
>GMTにする他なさそうなので、別の手法を考えてみます。
ユーザのタイムゾーンをGMTに変更しなくてもできます。ユーザのローカルタイムゾーンをGMTに変更すると正しく3日より前のレコードが正しく選択されることで確認することができたと思います。
今回の問題は質問のように時間が問題ではなく、GMTの日付で比較していることです。フィルタリングをローカルタイムゾーンで行うようにしたら問題は解決します。日本に限らず米国を含むServiceNowのユーザの多くのローカルタイムゾーンはGMT以外なで、ローカルタイムゾーンでテーブルのフィルタリング条件を指定する対策は既にあります。反対に言うと、このようなことができなければServiceNowは米国でも世界中で使われていません。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-29-2024 02:33 AM
下記ドキュメントを確認したところ、[relative]の制御は時や分などの時間の絞り込み時に用いるようです。
では3日前とする場合は、おそらく、[after]で絞り込むように考えられます。
・Values for date/time fields
https://docs.servicenow.com/bundle/xanadu-platform-user-interface/page/use/common-ui-elements/concep...
Operators available for date/time fields
Operators:after
Definition:Returns records after the specified time period.
Example:A filter run [after] [Next Month] on April 18, 2018 will return records from June 1 and later.