搜索插件、代码仓与 APP 分类

插件详情v5.3.4

moment_dart

多功能不可变 DateTime 子类。支持多种本地化,可轻松将 DateTime 和 Duration 转换为人类可读的格式

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
6820
喜欢数
86
Pub 分数
160

安装插件

flutter pub add moment_dart

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

moment_dart 是一个多功能、不可变的 DateTime 子类,专为在 Flutter 应用中轻松处理日期和时间而设计。它支持多种本地化,使开发者能够将 DateTime 和 Duration 对象转换为针对不同语言和地区定制的人类可读格式。该包以不可变性为核心理念,确保状态管理的安全性和可预测性。该包可无缝集成到 Android、iOS、Web、macOS、Windows 和 Linux 平台,非常适合需要强大日期格式化和本地化功能的跨平台应用。

适合场景

  • 格式化多种语言的日期
  • 计算时间差并以可读格式输出
  • 构建本地化日历界面
  • 处理时区感知的日期操作
  • 创建动态的“之前”时间字符串
  • 简化UI中的持续时间显示

主要特点

  • 不可变的 DateTime 替代品
  • 内置本地化支持
  • 可读性时间格式化
  • 跨平台兼容性
  • 持续时间转字符串
  • 可链式调用且流畅的 API

适合对象

  • 国际化 Flutter 应用
  • 需要时间的显示应用
  • 日历和调度工具
  • 本地化密集型项目
  • 在 Dart 中寻找类似 moment.js 的功能的开发者

使用建议

  • 需要仔细处理时区
  • 可能会略微增加包大小
  • 仅限日期/时间格式化使用场景
  • 不适用于复杂的日期算术运算
  • 依赖外部本地化数据
  • 最佳搭配 intl 包以获得完整的国际化支持

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

moment_dart

pub package License: MIT All Contributors

Inspired by moment.js

References

📖 Read documentation
🆕 Migrate to 5.x.x

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!

Contributing

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

Contributors

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

💻 🚧 🌍 📖
Ultrate
Ultrate

💻 🌍
Muhammadyusuf
Muhammadyusuf

🌍 💻
Paweł
Paweł

🌍 💻

所属分类

源码仓库

使用此插件的项目