moment_dart 2.2.1+beta.0 copy "moment_dart: ^2.2.1+beta.0" to clipboard
moment_dart: ^2.2.1+beta.0 copied to clipboard

Multi-purpose immutable DateTime subclass. Supports multiple localizations to easily convert DateTime and Duration into human-readable format

moment_dart #

pub package License: MIT All Contributors

Inspired by moment.js

References #

📖 Read documentation #

🆕 Migrate to 1.0.0 #

Usage #

Creating instance #

There are multiple ways to create an instance.

// From DateTime
final a = DateTime.now().toMoment();

final b = Moment(DateTime(...));

// This instance won't be affected by global localization!
final c = Moment(b, localization: MomentLocalizations.koKr());

Setting global localization #

By default, the global localization is en_US.

Moment.setGlobalLocalization(MomentLocalizations.fr());

Relative Duration #

Relative durations are rather inprecise. See precise duration for accuracy and flexibility.

Read about thresholds, and more on docs

final yesterday = Moment.now() - const Duration(days: 1);
yesterday.fromNow(); // a day ago

final add5sec = Moment.now().add(const Duration(seconds: 5));
add5sec.fromNow(dropPrefixOrSuffix: true); // a few seconds

Precise duration #

You can create localized human-readable duration text with abbreviation, highly-customizable units.

See more on docs. (delimiter, custom units, abbreviation...)

On Duration objects:

Duration(days: 67, hours: 3, minutes: 2).toDurationString(
  localization: MomentLocalizations.de(),
  form: Abbreviation.semi,
); // in 2 Mo. 7 Tg.

For Moment:

final epoch = Moment.fromMillisecondsSinceEpoch(0);
final now = DateTime(2023, DateTime.july, 14).toMoment();

print(epoch.fromPrecise(now)); // 53 years 7 months ago

Calendar #

final Moment now = Moment.now();

print(now.calendar()); // Today at 03:00 PM

Other helpful methods #

moment_dart provides numerous convenience methods. Works on both Moment and DateTime.

See all available options in the docs

final now = DateTime.now(); // July 19 2023 03:12 PM (UTC+8)

// ISO week, ISO week year
now.week; // 48
now.weekYear; // 2023

now.isLeapYear; // false

// Date creates new `DateTime` with hours, minutes, etc.. omitted
now.date; // July 19 2023 00:00 AM

now.clone(); // July 19 2023 03:12 PM

now.nextTuesday(); // July 25 2023 03:12 PM

// and many more!

Migrate to 1.0.0 #

  • Instead of MomentLocalizations.ko(), use MomentLocalizations.koKr()
  • Replace UnitStringForm with:
    • UnitStringForm.short => Abbreviation.full
    • UnitStringForm.mid => Abbreviation.semi
    • UnitStringForm.full => Abbreviation.none
  • In Moment().calendar() calls: remove weekStart argument
  • DateTimeConstructors.withTimezone: move isUtc argument to first position
  • Replace deprecated methods

Contributing #

Contributions of any kind are welcome! Please refer to CONTRIBUTE.md

Contributors #

Батмэнд Ганбаатар
Батмэнд Ганбаатар

💻 🚧 🌍 📖
78
likes
160
pub points
95%
popularity

Publisher

verified publisherdev.gege.mn

Multi-purpose immutable DateTime subclass. Supports multiple localizations to easily convert DateTime and Duration into human-readable format

Repository (GitHub)
View/report issues

Documentation

Documentation
API reference

Funding

Consider supporting this project:

ko-fi.com

License

MIT (license)

More

Packages that depend on moment_dart