我不知道如何检查datetime变量是否是今天、明天或昨天。
在类成员中,我没有找到相应的方法。
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) {
...
}
提示: now.day - 1
和 now.day + 1
可以在涉及不同年份或月份的日期上正常使用。
尽管上面的回答是正确的,但我想提供一个更简洁、更灵活的替代方案:
/// 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;
}
所以,如果您想检查date
是否为:
calculateDifference(date) == -1
。calculateDifference(date) == 0
。calculateDifference(date) == 1
。extension DateHelpers on DateTime {
bool get isToday {
final now = DateTime.now();
return now.day == day && now.month == month && now.year == year;
}
bool get isYesterday {
final yesterday = DateTime.now().subtract(const Duration(days: 1));
return yesterday.day == day &&
yesterday.month == month &&
yesterday.year == year;
}
}
DateTime
类中一样调用相应的函数。Text(
myDate.isToday() ? "Today"
: myDate.isYesterday() ? "Yesterday"
: DateFormat("dd MMM").format(myDate)
)
@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;
}
}
isToday
检查:/// Returns `true` if the [date] is today. Respects the time zone.
/// https://dev59.com/hVQJ5IYBdhLWcg3wMCx_#60213219
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;
}
为了更简化操作,您可以按照以下步骤进行。
String myDate = "01/09/2022";
例如,我需要检查这个“myDate”是今天还是明天。
因此,我只需调用此函数即可:
String dateConverter(String myDate) {
String date;
DateTime convertedDate =
DateFormat("DD/MM/YYYY").parse(myDate.toString());
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 = convertedDate;
final checkDate = DateTime(dateToCheck.year, dateToCheck.month, dateToCheck.day);
if (checkDate == today) {
date = "Today";
} else if (checkDate == yesterday) {
date = "Yesterday";
} else if (checkDate == tomorrow) {
date = "Tomorrow";
} else {
date = myDate;
}
return date;
}
bool isToday(DateTime date) {
final now = DateTime.now();
return now.year == date.year &&
now.month == date.month &&
now.day == date.day;
}
这个也可以完成工作
String checkDate(String dateString){
// example, dateString = "2020-01-26";
DateTime checkedTime= DateTime.parse(dateString);
DateTime currentTime= DateTime.now();
if((currentTime.year == checkedTime.year)
&& (currentTime.month == checkedTime.month)
&& (currentTime.day == checkedTime.day))
{
return "TODAY";
}
else if((currentTime.year == checkedTime.year)
&& (currentTime.month == checkedTime.month))
{
if((currentTime.day - checkedTime.day) == 1){
return "YESTERDAY";
}else if((currentTime.day - checkedTime.day) == -1){
return "TOMORROW";
}else{
return dateString;
}
}
}