0
Help us understand the problem. What are the problem?

posted at

updated at

ServiceNow - 曜日を表示する

課題:

日付の曜日を日本語で表示させる。
*** Script: 2022年01月30日日曜日

問題:

ServiceNowで.getByFormat()で曜日を表示すると曜日が英語になる。Javaの場合はSimpleDateFormat()でLocaleを指定することはできますが、ServiceNowではスクリプトからLocaleの利用を禁止されている。

var gdt = new GlideDateTime();
var format = 'MM月dd日EEEE曜日';
var gDate = gdt.getLocalDate();
gs.info(gDate.getByFormat(format));

その結果、上のスクリプトを実行すると曜日は英語になる。
2022年01月30日Sunday

次ぎのようにスクリプトで日本語の曜日を配列にして取得することもできる。

var dayOfWeekStr = [ "日", "月", "火", "水", "木", "金", "土" ];

var gdt = new GlideDateTime();
var format = 'yyyy年MM月dd日E曜日';
var dow = gdt.getDayOfWeekLocalTime();

format = format.replace('E', dayOfWeekStr[dow]);
var gDate = gdt.getLocalDate();
gs.info(gDate.getByFormat(format));

しかし、ServiceNowでは各言語の翻訳をデータベースに保存してあるためそこから参照するようにしたら日本語だけではなく、他言語でも曜日を表示させることができる。

        var dowArray = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];

        function getDate(gdt, format, lang) {
            //var dow = getDayOfWeekList(lang);
            var dowNum = gdt.getDayOfWeekLocalTime();
            var gDate = gdt.getLocalDate();
            var orgStr = dowArray[dowNum - 1];
            orgStr = orgStr.charAt(0).toUpperCase() + orgStr.slice(1);
            return gDate.getByFormat(format).replace(orgStr, gs.getMessageLang(orgStr, lang));
        }

        var lang = 'ja';
        var format = 'yyyy年MM月dd日EEEE';
        var gdt = new GlideDateTime();

        gs.info(getDate(gdt, format, lang));

実行結果

lang='ja'
*** Script: 2022年01月30日日曜日
lang='en'
*** Script: 2022年01月30日Sunday
以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?