我正在开发一个 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
对象的 year
、month
和 day
属性:
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/