代码之家  ›  专栏  ›  技术社区  ›  Dave

ServiceNow:计算日期差异(以年、月、日为单位)不准确

  •  0
  • Dave  · 技术社区  · 6 年前

    我们的作用域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);
    

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Thomas Prince    6 年前

    使用 this answer 作为参考。

    一旦你有了这个号码,你就可以在你的日数中加上那么多天。

    // ... the rest of your code
    
    var durationDays = Math.floor((duration % 365)%30) + LeapYearsBetween(fromYearValue, toYearValue);
    
    function LeapYearsBetween(start, end)
    {
        return LeapYearsBefore(end) - LeapYearsBefore(start + 1);
    }
    
    function LeapYearsBefore(year)
    {
        year -= 1;
        return (year / 4) - (year / 100) + (year / 400);
    }

    希望这能给你指明正确的方向。

        2
  •  0
  •   Gordon Mohrin    6 年前

    年: gdt1.getYear() - gdt2.getYear()

    gdt1.getMonth() - gdt2.getMonth() + yearDifference*12

    就我所见,日子应该是正确的。你也可以检查一下这根线 Difference in Months between two dates in JavaScript