Search packages, repositories and app categories

Package detailsv5.0.0

relative_time

Expresses a DateTime object relative to the current time in text form.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
8.2K
Likes
22
Pub points
160

Install package

flutter pub add relative_time

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

The relative_time package converts a DateTime object into a human-readable string that expresses the time relative to the current moment. For example, it can display '2 minutes ago' or 'in 3 hours' instead of raw timestamps. It supports multiple languages and is designed for simplicity and performance across all major platforms including Android, iOS, Web, macOS, Windows, and Linux. Ideal for apps needing dynamic, user-friendly time displays in feeds, notifications, or chat interfaces.

Use cases

  • Displaying time since a post was published
  • Showing countdowns or reminders
  • Enhancing chat message timestamps
  • Updating real-time activity indicators
  • Improving UX in social media apps

Key features

  • Simple API with minimal setup
  • Supports localization
  • Cross-platform compatibility
  • Automatic updates for real-time accuracy
  • Lightweight and efficient

Suitable for

  • Apps with real-time data feeds
  • Social networking applications
  • Task and reminder tools
  • Chat and messaging platforms
  • User interface components requiring dynamic time labels

Considerations

  • Requires manual refresh for real-time updates
  • Limited to relative time formatting only
  • No built-in support for custom time units
  • Depends on system clock accuracy
  • May need additional handling for timezone differences

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

relative_time

A Flutter package to express a DateTime object relative to the current time in text form. For instance, it may transform DateTimes into 3 years ago, or in 42 minutes, or now.

Features

  • Available in more languages than you can name.
  • Provides localization delegate for easy internationalization.
  • Usable as class instance method call or extension method.
  • Can be expressed in different, customizable time units.
  • Supports numeric and natural representations.

Getting started

The package may optionally retrieve the appropriate localization from the BuildContext. The standard way to setup localization is to make use of a WidgetApp's (such as a MaterialApp) localizationsDelegates and supportedLocales. If you're already using these to localize your app, it should suffice to add RelativeTimeLocalizations.delegate to your list of localizationsDelegates, roughly as follows.

MaterialApp(
  localizationsDelegates: const <LocalizationsDelegate<dynamic>>[
    AppLocalizations.delegate,
    RelativeTimeLocalizations.delegate,
    GlobalMaterialLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  supportedLocales: AppLocalizations.supportedLocales,
);

If your app does not make use of (this form of) localization yet but you would like it to, reference the Flutter documentation on internationalization for more information on how to set this up.

Usage

The relative time may be accessed by passing the DateTime source object to format on an instance of RelativeTime with either a BuildContext (if configured for localization) or a specific Locale.

RelativeTime(context).format(time);
RelativeTime.locale(const Locale('en')).format(time);

Alternatively, the provided DateTime extension methods are a bit more concise.

time.relativeTime(context);
time.relativeTimeLocale(const Locale('en'));

You may specify a list of time units that will be considered. This can be any of the following: year, month, week, day, hour, minute and second. By default, all time units are potentially used. The following limits the relative time to being expressed in years and weeks. No judgement here. Because weeks are the most granular time unit specified, anything less than one week would be represented as this week.

RelativeTime(
  context, 
  timeUnits: const <TimeUnit>[
    TimeUnit.year,
    TimeUnit.week,
  ],
).format(time);

By default, results are described using natural language as much as possible. That is, one day in the future will be transformed into tomorrow. If you'd rather see this as in 1 day, set the numeric parameter to true.

RelativeTime(
  context,
  numeric: true,
).format(time);

Testing

The current time may be mocked with help from the clock package.

withClock(
  Clock.fixed(DateTime.fromMicrosecondsSinceEpoch(0)),
  () => RelativeTime(context).format(time),
);

Additional information

Translations have been extracted from the Unicode CLDR Project. The extraction tool for this purpose is available in the dev folder. Note that due to the automated nature of this process, PRs for language updates will not be considered.

Categories

Dependencies

Dependency list 2 items

Source repository

Projects using this package