lib/vendor/sugar.js
function applyErrorMargin(ms) {
        var num      = ms / multiplier,
            fraction = num % 1,
            error    = u.error || 0.999;
        if(fraction && math.abs(fraction % 1) > error) {
          num = round(num);
        }
        return parseInt(num);
      }
function applyErrorMargin(ms) {
        var num      = ms / multiplier,
            fraction = num % 1,
            error    = u.error || 0.999;
        if(fraction && math.abs(fraction % 1) > error) {
          num = round(num);
        }
        return parseInt(num);
      }
"since/until now" only count "past" an integer, i.e. "2 days ago" is anything between 2 - 2.999 days. The default margin of error is 0.999, but "months" have an inherently larger margin, as the number of days in a given month may be significantly less than the number of days in the average month, so for example "30 days" before March 15 may in fact be 1 month ago. Years also have a margin of error due to leap years, but this is roughly 0.999 anyway (365 / 365.25). Other units do not technically need the error margin applied to them but this accounts for discrepancies like (15).hoursAgo() which technically creates the current date first, then creates a date 15 hours before and compares them, the discrepancy between the creation of the 2 dates means that they may actually be 15.0001 hours apart. Milliseconds don't have fractions, so they won't be subject to this error margin.