【发布时间】:2019-08-03 10:55:44
【问题描述】:
我们在范围内的 ServiceNow 应用程序中要求计算两个日期之间的年数、月数和天数。我们的以下业务规则运行良好,但并非 100% 完美:
(function executeRule(current, previous /*null when async*/) {
var t = new GlideDateTime(current.from.getDisplayValue());
var f = new GlideDateTime(current.to.getDisplayValue());
var duration = GlideDateTime.subtract(t, f).getDayPart();
var durationYears = Math.floor(duration/365);
var durationMonths = Math.floor((duration % 365)/30);
var durationDays = Math.floor((duration % 365)%30);
current.setValue('year', durationYears);
current.setValue('month', durationMonths);
current.setValue('day', durationDays);
})(current, previous);
如果假设每个月有 30 天,这很好用。但是,月份长度显然可以在 29 到 31 天之间(包括闰年)。以上代码有什么建议可以不使用moment.js等库更准确?
谢谢!
【问题讨论】:
-
好吧,我会写“我自己的除法”,您可以创建 12 个月的数组(包含天数),然后在循环中减去它们。这可能是一个糟糕的解决方案。每四年只需更改 2 月的金额。
标签: javascript datediff servicenow