text: 'use strict';
  
  var getNewDate = require('./getNewDate'),
      mathAliases = require('../../common/var/mathAliases'),
      getAdjustedUnit = require('./getAdjustedUnit'),
      getTimeDistanceForUnit = require('./getTimeDistanceForUnit');
  
  var abs = mathAliases.abs;
  
  function getAdjustedUnitForDate(d, dRelative) {
    var ms;
    if (!dRelative) {
      dRelative = getNewDate();
      if (d > dRelative) {
        // If our date is greater than the one that we got from getNewDate, it
        // means that we are finding the unit for a date that is in the future
        // relative to now. However, often the incoming date was created in
        // the same cycle as our comparison, but our "now" date will have been
        // created an instant after it, creating situations where "5 minutes from
        // now" becomes "4 minutes from now" in the same tick. To prevent this,
        // subtract a buffer of 10ms to compensate.
        dRelative = new Date(dRelative.getTime() - 10);
      }
    }
    ms = d - dRelative;
    return getAdjustedUnit(ms, function(u) {
      return abs(getTimeDistanceForUnit(d, dRelative, u));
    });
  }
  
  module.exports = getAdjustedUnitForDate;