Gün*_*uer 63
final now = DateTime.now();
final today = DateTime(now.year, now.month, now.day);
final yesterday = DateTime(now.year, now.month, now.day - 1);
final tomorrow = DateTime(now.year, now.month, now.day + 1);
final dateToCheck = ...
final aDate = DateTime(dateToCheck.year, dateToCheck.month, dateToCheck.day);
if(aDate == today) {
...
} else if(aDate == yesterday) {
...
} else(aDate == tomorrow) {
...
}
Run Code Online (Sandbox Code Playgroud)
命中:now.day - 1并且now.day + 1适用于导致不同年份或月份的日期。
Sky*_*ost 25
虽然上述答案是正确的,但我想提供一个更紧凑和灵活的替代方案:
/// Returns the difference (in full days) between the provided date and today.
int calculateDifference(DateTime date) {
DateTime now = DateTime.now();
return DateTime(date.year, date.month, date.day).difference(DateTime(now.year, now.month, now.day)).inDays;
}
Run Code Online (Sandbox Code Playgroud)
所以如果你想检查是否date是:
calculateDifference(date) == -1。calculateDifference(date) == 0。calculateDifference(date) == 1。34m*_*4m0 18
使用 dart 扩展可以让你的代码更优雅。您可以使用以下内容创建实用程序类:
extension DateHelpers on DateTime {
bool isToday() {
final now = DateTime.now();
return now.day == this.day &&
now.month == this.month &&
now.year == this.year;
}
bool isYesterday() {
final yesterday = DateTime.now().subtract(Duration(days: 1));
return yesterday.day == this.day &&
yesterday.month == this.month &&
yesterday.year == this.year;
}
}
Run Code Online (Sandbox Code Playgroud)
然后每当您需要知道某一天是今天还是昨天时,将实用程序类导入到您需要的文件中,然后调用适当的函数,就像类中内置的那样DateTime。
Text(
myDate.isToday() ? "Today"
: myDate.isYesterday() ? "Yesterday"
: DateFormat("dd MMM").format(myDate)
)
Run Code Online (Sandbox Code Playgroud)
Ced*_*Ced 17
@34mo 的答案已更新为 flutter lint 2021
extension DateUtils on DateTime {
bool get isToday {
final now = DateTime.now();
return now.day == day && now.month == month && now.year == year;
}
bool get isTomorrow {
final tomorrow = DateTime.now().add(const Duration(days: 1));
return tomorrow.day == day &&
tomorrow.month == month &&
tomorrow.year == year;
}
bool get isYesterday {
final yesterday = DateTime.now().subtract(const Duration(days: 1));
return yesterday.day == day &&
yesterday.month == month &&
yesterday.year == year;
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*eev 11
一个简单的isToday检查:
/// Returns `true` if the [date] is today. Respects the time zone.
/// https://stackoverflow.com/a/60213219/1321917
bool isToday(DateTime date) {
final DateTime localDate = date.toLocal();
final now = DateTime.now();
final diff = now.difference(localDate).inDays;
return diff == 0 && now.day == localDate.day;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19172 次 |
| 最近记录: |