我正在尝试从颤振中的周数获取日期。但我不知道该怎么做。我得到了周数和星期几。现在我想获取本周的日期。
例如: 第 2 周星期一日期, 第 2 周星期二日期, 第 2 周星期五日期
我已经开始使用这段代码,但我需要以另一种方式解决它。
int weeknumber = 2;
//1=monday, 2=tuesday, 5=friday
List<int> weekdays = [1,2,5];
int year = 2023;
int totaldays = weeknumber * 7;
final extraDuration = Duration(days: totaldays);
final startDate = DateTime(year);
final dates = startDate.add(extraDuration);
print(dates);
这是输出:2023-01-15 00:00:00.000
但我想要:2023-01-09、2023-01-10、2023-01-13
我该怎么做才能获得这些日期?
如果你想要这个输出 星期一:2023-01-09 00:00:00.000
星期二:2023-01-10 00:00:00.000
星期五:2023-01-13 00:00:00.000
您可以使用此代码
import 'package:intl/intl.dart';
void main() {
int weeknumber = 2;
//1=monday, 2=tuesday, 5=friday
List<String> weekdays = ['Monday','Tuesday','Friday'];
int year = 2023;
int firstDayOfWeek = (weeknumber-1) * 7;
final extraDuration = Duration(days: firstDayOfWeek);
final startDate = DateTime(year);
final dates = startDate.add(extraDuration);
for (var i = 0; i < 7; i++) {
var newDate = dates.add(Duration(days: i));
if(DateFormat('EEEE').format(newDate) == 'Monday')print('Monday:'+newDate.toString());
else if(DateFormat('EEEE').format(newDate) == 'Tuesday')print('Tuesday:'+newDate.toString());
else if(DateFormat('EEEE').format(newDate) == 'Friday')print('Friday:'+newDate.toString());
}
print(dates);
}
我已经制作了一种辅助方法,在我的一个项目中你可以使用它
static DateTime getDateOfWeekday(String shortDayName) {
final Map<String, int> dayNumbers = {
'Sunday': 7,
'Monday': 1,
'Tuesday': 2,
'Wednesday': 3,
'Thursday': 4,
'Friday': 5,
'Saturday': 6,
};
static final Map<String, String> dayNames = {
'Sun': 'Sunday',
'Mon': 'Monday',
'Tue': 'Tuesday',
'Wed': 'Wednesday',
'Thu': 'Thursday',
'Fri': 'Friday',
'Sat': 'Saturday',
};
String? fullDayName = Constants.dayNames[shortDayName];
if (fullDayName == null) {
throw ArgumentError('Invalid day name');
}
DateTime now = DateTime.now();
int currentWeekday = now.weekday;
int targetWeekday = dayNumbers[fullDayName] ?? currentWeekday;
int difference = targetWeekday - currentWeekday;
//add this check if you want the week start from today
if (difference < 0) {
difference += 7;
}
DateTime targetDate = now.add(Duration(days: difference));
return targetDate;
}