課題:
日付の曜日を日本語で表示させる。
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));
その結果、上のスクリプトを実行すると曜日は英語になる。
次ぎのようにスクリプトで日本語の曜日を配列にして取得することもできる。
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
以上