2つの日付の差(日数もしくは日時)を求める方法

a_129
Mega Guru


現在、貸与資産オーダーテーブルにある開始日から返却日の2つの日付の差(日数もしくは日時)を求める方法を模索しています。

以下のようなアクションを作成してみましたが、上手くいきません。

(function execute(inputs, outputs) {
  var gd = new GlideDate(); 
  var start_date = gd.setValue(inputs.start_date); 
  var end_date = gd.setValue(inputs.end_date); 
  outputs.diffDays = end_date - start_date;
})(inputs, outputs);

アクションのスクリプトやその他方法についてご教授いただけますと幸いです。

1 件の受理された解決策

お手数を掛けます。入力ミスでした。

「substract」ではなく「subtract」です。

https://developer.servicenow.com/dev.do#!/reference/api/rome/server/no-namespace/c_APIRef#r_ScopedGl...

元の投稿で解決策を見る

7件の返信7

Ikeda1
Mega Guru

こんにちは。

  var start_date = gd.setValue(inputs.start_date); 
  var end_date = gd.setValue(inputs.end_date); 

とありますが、以下だったりしませんか?

  var start_date = gd.getValue(inputs.start_date); 
  var end_date = gd.getValue(inputs.end_date); 

あと、差分の計算結果はミリ秒で出力されるため、必要な値に計算が必要です。
例:日数の場合は計算結果を86400000で割る

想定されるアウトプットのフォーマットはどのようなものか、必要であれば詳細をお聞かせください。

リプライありがとうございます。

抽出した日付の差は、「条件待ち」アクションの期間の部分で利用するため、
Durationタイプでアウトプットしたいと考えています。

>日数の場合は計算結果を86400000で割る

上記を参考に以下スクリプトを作成し、差分の日数を取得できましたが、
「条件待ち」アクションで利用する際は、日・時間・秒どの単位で抽出すれば良いでしょうか。

(function execute(inputs, outputs) {
var startDateTime = new GlideDateTime(inputs.start_date);
var endDateTime = new GlideDateTime(inputs.end_date); 
var dur = new DurationCalculator();

dur.calcScheduleDuration(startDateTime, endDateTime);
var totalSecs = dur.getTotalSeconds();
outputs.duration = totalSecs/86400;
})(inputs, outputs);

Hitoshi Ozawa
Giga Sage
Giga Sage

GlideDate()を利用する場合はGlideDate.subtract()を利用します。

  var gd = new GlideDate(); 
  var start_date = gd.setValue(inputs.start_date); 
  var end_date = gd.setValue(inputs.end_date); 
  outputs.diffDays = GlideDate.substract(end_date, start_date);

結果は「1日」のように「日」を含む文字列になります。

Hitoshi Ozawa
Giga Sage
Giga Sage

GlideDate()を利用する場合はGlideDate.substract()を利用します。

例:

日付で返す場合:

(function execute(inputs, outputs) {
  var gd = new GlideDate(); 
  var start_date = gd.setValue(inputs.start_date); 
  var end_date = gd.setValue(inputs.end_date);
  var duration= GlideDate.substract(end_date, start_date);
  outputs.diffDays = duration.getRoundedDayPart();
})(inputs, outputs);

年月日で返す場合:

(function execute(inputs, outputs) {
  var gd = new GlideDate(); 
  var start_date = gd.setValue(inputs.start_date); 
  var end_date = gd.setValue(inputs.end_date);
  var duration= GlideDate.substract(end_date, start_date);
  var diff = duration.getByFormat('yyyy MM dd').split(' ');
  var years = diff[0]-1970;  // 年
  var months = diff[1]-1;    // 月
  var days = diff[2]-1;      // 日
  outputs.diffDays = years + '年 ' + months + '月 ' + days + '日';
})(inputs, outputs);