ServiceNow中的日期比较

时间:2019-01-10 12:46:21

标签: javascript date servicenow

比较两个日期时,如何获得DAYS中两个日期对象之间的差异? (例如-2017-07-31和2017-07-28->这应该返回3天)。

UNIX时间戳无法使用,因为它对我的情况不准确-无法知道我应该向上还是向下舍入到最近的24小时(1天)。

getDay()函数在ServiceNow中的作用域内的应用程序中不起作用。

3 个答案:

答案 0 :(得分:0)

以YYYY-MM-DD格式给出日期,您可以使用Date构造函数,从另一个中减去一个,然后除以一天中的毫秒数。

这些字符串将被解析为UTC,因此夏时制没有问题,ECMAScript每天精确地有8.64e7 ms。即使您需要四舍五入,夏令时也不会将值更改超过1小时(在某些地方更少),因此四舍五入是可以的。例如

var d0 = '2017-07-31';
var d1 = '2017-07-28';
var diffDays = (new Date(d0) - new Date(d1)) / 8.64e7;

console.log(diffDays);

通常建议避免使用内置解析器,但是在这种情况下,它可能还可以。但是,请放心,手动解析字符串,一个库可以提供帮助,但只需要2行函数即可。

如果您的日期不是按照上述方法创建的,并且未将其设置为午夜,则可以通过将日期设置为午夜(减去和舍入)来获得日期之间的天数,例如

var d0 = new Date(2017, 6, 31, 23, 15, 45); // 2017-07-31T23:15:25 local
var d1 = new Date(2017, 6, 28, 3, 15, 45);  // 2017-07-28T03:15:25 local

function diffDays(d0, d1) {
  var a = new Date(d0).setHours(0,0,0,0);
  var b = new Date(d1).setHours(0,0,0,0);
  return Math.round((a - b) / 8.64e7);
}

console.log(diffDays(d0, d1));

答案 1 :(得分:0)

Service Now中最常用的用于计算持续时间的API是gs.DateDiff(date1,date2),但在范围限定的应用程序中不起作用。

SN提供了自己的API,可以使用GlideDateTime API

在范围内的应用中获取持续时间

如果您的字段是日期/时间

var date1 = new GlideDateTime("2011-08-28 09:00:00");
var date2 = new GlideDateTime("2011-08-31 08:00:00");
var diff = GlideDateTime.subtract(date1, date2);
gs.info(diff.getDisplayValue());

如果您需要在记录中的任何字段上引用它,则将日期指定为

var date1 = new GlideDateTime(current.sys_created_on);
var date2 = new GlideDateTime(current.sys_updated_on);

以秒为单位获取数值差异

gs.info(diff.getNumericValue());

仅减去日期字段的持续时间

diff = GlideDate.subtract(date1, date2);
gs.info(diff.getDisplayValue());

答案 2 :(得分:0)

如果要在作用域应用程序中使用业务规则来执行此操作,则它可能类似于以下内容(在Orlando版本中经过测试):

(function executeRule(current, previous /*null when async*/) {

    var field_1 = new GlideDateTime(current.field_1);
    var field_2 = new GlideDateTime(current.field_2);
    current.field_duration = new GlideDuration(field_1.getNumericValue() - field_2.getNumericValue());

})(current, previous);