Flutter 如何从周数获取日期

问题描述 投票:0回答:2

我正在尝试从颤振中的周数获取日期。但我不知道该怎么做。我得到了周数和星期几。现在我想获取本周的日期。

例如: 第 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

我该怎么做才能获得这些日期?

flutter dart
2个回答
1
投票

如果你想要这个输出 星期一: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);
}


0
投票

我已经制作了一种辅助方法,在我的一个项目中你可以使用它

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;
 }
© www.soinside.com 2019 - 2024. All rights reserved.