from method

String from (Tempus other, [ bool withoutPrefixOrSuffix = false ])

Returns a String with the different between this and other. Takes an optional bool argument to decide whether to use an identifier. withoutPrefixOrSuffix defaults to false.

var berlinWallFell = Tempus.parse('19891109');
var dDay = Tempus.parse('19440606');
String difference = berlinWallFell.from(dDay);
assert(difference == '46 years ago');

var berlinWallFell = Tempus.parse('19891109');
var dDay = Tempus.parse('19440606');
String difference = berlinWallFell.from(dDay, false);
assert(difference == '46 years');

Implementation

String from(Tempus other, [bool withoutPrefixOrSuffix = false]) {
  Duration diff = _date.difference(other._date);

  String timeString = '';

  var locale = _getLocale();

  if (diff.inSeconds.abs() < 45) {
    timeString = locale.seconds.replaceFirst('%i', '${diff.inSeconds.abs()}');
  } else if (diff.inMinutes.abs() < 2) {
    timeString = locale.aMinute.replaceFirst('%i', '${diff.inMinutes.abs()}');
  } else if (diff.inMinutes.abs() < 45) {
    timeString = locale.minutes.replaceFirst('%i', '${diff.inMinutes.abs()}');
  } else if (diff.inHours.abs() < 2) {
    timeString = locale.anHour.replaceFirst('%i', '${diff.inHours.abs()}');
  } else if (diff.inHours.abs() < 22) {
    timeString = locale.hours.replaceFirst('%i', '${diff.inHours.abs()}');
  } else if (diff.inDays.abs() < 2) {
    timeString = locale.aDay.replaceFirst('%i', '${diff.inDays.abs()}');
  } else if (diff.inDays.abs() < 26) {
    timeString = locale.days.replaceFirst('%i', '${diff.inDays.abs()}');
  } else if (diff.inDays.abs() < 60) {
    timeString =
        locale.aMonth.replaceFirst('%i', '${diff.inDays.abs() ~/ 30}');
  } else if (diff.inDays.abs() < 320) {
    timeString =
        locale.months.replaceFirst('%i', '${diff.inDays.abs() ~/ 30}');
  } else if (diff.inDays.abs() < 547) {
    timeString =
        locale.aYear.replaceFirst('%i', '${diff.inDays.abs() ~/ 356}');
  } else {
    timeString =
        locale.years.replaceFirst('%i', '${diff.inDays.abs() ~/ 356}');
  }

  if (!withoutPrefixOrSuffix) {
    if (diff.isNegative) {
      timeString = _addIdentifier(
          timeString, locale.futurePosition, locale.futureIdentifier);
    } else {
      timeString = _addIdentifier(
          timeString, locale.pastPosition, locale.pastIdentifier);
    }
  }

  return timeString;
}