flutter - 仅在 Flutter 中按日期比较 DateTime 对象

标签 flutter dart date datetime comparison

我正在开发一个 Flutter 项目,我需要比较两个 DateTime 对象,但仅按日期进行比较。 DateTime 对象的时间部分与我的比较无关。

这是我正在处理的 DateTime 对象的示例:

Dart

DateTime dt1 = DateTime.parse("2023-11-10 11:47:00");
DateTime dt2 = DateTime.parse("2023-11-10 10:09:00");

我想比较 dt1 和 dt2,只考虑日期(年、月、日),而不考虑时间。我怎样才能在 Flutter 中实现这一目标?任何帮助,将不胜感激。谢谢!

最佳答案

1) 仅使用年、月和日属性创建新的 Date 对象

final date1 = DateTime.parse('2021-09-01 03:30:00');
final date2 = DateTime.parse('2021-09-01 04:30:00');

int compareOnlyByDate(DateTime other) {
  return DateTime(date1.year, date1.month, date1.day).compareTo(
    DateTime(other.year, other.month, other.day),
  );
}

// usage
final result = date1.compareOnlyByDate(date2);

if (result == 0) {
  print('dates are equal');
} 
if (result < 0) {
  print('date1 is before date2');
}
if (result > 0) {
  print('date1 is after date2');
}

或者作为扩展方法:

extension CompareDates on DateTime {
  int compareOnlyByDate(DateTime other) {
    return DateTime(year, month, day).compareTo(
      DateTime(other.year, other.month, other.day),
    );
  }
}

2) 如果你不想创建新对象

您可以比较 DateTime 对象的 yearmonthday 属性:

int compareOnlyByDate(DateTime date1, DateTime date2) {
  if (date1.year == date2.year) {
    if (date1.month == date2.month) {
      return date1.day - date2.day;
    } else {
      return date1.month - date2.month;
    }
  } else {
    return date1.year - date2.year;
  }
}

这是另一种方法:

bool isSameDay(DateTime date1, DateTime date2) {
  return date1.year == date2.year &&
      date1.month == date2.month &&
      date1.day == date2.day;
}

bool isGreater(DateTime date1, DateTime date2) {
  return date1.isAfter(date2) && !isSameDay(date1, date2);
}

bool isLess(DateTime date1, DateTime date2) {
  return date1.isBefore(date2) && !isSameDay(date1, date2);
}

关于flutter - 仅在 Flutter 中按日期比较 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77457967/

相关文章:

firebase - Flutter,是否可以在没有窗口小部件构建方法的情况下在功能中使用Firestore Stream Builder?

使用分隔符按百分比进行 flutter 行布局

javascript - 解析自定义日期并排序

flutter - 是否有一个库可以在 flutter 应用中绘制音频波形

flutter - 将“容器”与“按钮”在屏幕底部的“列”中对齐

flutter - 显示水平滚动条抖动

delphi - Delphi 中的时间数学

JavaScript 日期实例混淆

dart - 在所有页面 Flutter 中持久化 AppBar Drawer

flutter - 根据索引/变量更改小部件的颜色