Как мне узнать дни и даты текущей недели в dart?

#dart

Вопрос:

Кажется, я не могу найти способ узнать название дней текущей недели и дату дней, например, на этой неделе я ищу способ получить этот результат:

   List days = [
    {"label": "Mon", "day": "18"},
    {"label": "Tue", "day": "19"},
    {"label": "Wed", "day": "20"},
    {"label": "Thu", "day": "21"},
    {"label": "Fri", "day": "22"},
    {"label": "Sat", "day": "23"},
    {"label": "Sun", "day": "24"},
  ];
 

Мне потребовалось некоторое время, но это лучшее, что я мог придумать. Если у кого-то есть идея получше, поделитесь ею, спасибо.

 import 'package:intl/intl.dart';

List getWeekDayList = [
  {"label": "Mon", "day": getDateOfWeekDay('monday')},
  {"label": "Tue", "day": getDateOfWeekDay('tuesday')},
  {"label": "Wed", "day": getDateOfWeekDay('wednesday')},
  {"label": "Thu", "day": getDateOfWeekDay('thursday')},
  {"label": "Fri", "day": getDateOfWeekDay('friday')},
  {"label": "Sat", "day": getDateOfWeekDay('saturday')},
  {"label": "Sun", "day": getDateOfWeekDay('sunday')},
];

DateTime weekdayOf(DateTime time, int weekday) =>
    time.add(Duration(days: weekday - time.weekday));

String getDateOfWeekDay(String weekday) {
  final now = DateTime.now();
  final df = DateFormat.d();
  final int dayToGet = weekdayToNum[weekday]!;
  return df.format(weekdayOf(now, dayToGet));
}

int getCurrentWeekDayInt() {
  return DateTime.now().weekday - 1;
}

var weekdayToNum = {
  'monday': 1,
  'tuesday': 2,
  'wednesday': 3,
  'thursday': 4,
  'friday': 5,
  'saturday': 6,
  'sunday': 7
};
 

Ответ №1:

Есть две проблемы, которые нам нужно решить, чтобы реализовать то, о чем вы просите.

Первый: определите название каждого дня недели, для этого мы можем использовать список:

 
List<String> weekdayNames = [
  'Mon',
  'Tue',
  'Wed',
  'Thu',
  'Fri',
  'Sat',
  'Sun',
];
 

Во-вторых, выясните, сколько дней назад был понедельник, для этого мы можем использовать свойство дня недели

 int monOffset = now.weekday-1
 

Если убрать эти два параметра, метка вашего объекта будет равна индексу дня в списке имен, а свойство day будет равно текущему дню — mondayOffset день недели, который мы хотим проверить

Вот полный код для создания списка:

 void main() {
  List<String> weekdayNames = [
    'Mon',
    'Tue',
    'Wed',
    'Thu',
    'Fri',
    'Sat',
    'Sun',
  ];
  
  DateTime now = DateTime.now();
  int monOffset = now.weekday-1;
  
  List<Map<String, dynamic>> days = List.generate(
    7, 
    (index) => 
      {
        'label': weekdayNames[index], 
        'day': now.day-monOffset index
      }
  );
  
  print(days);
}
 

Комментарии:

1. Это намного лучше, чем мое решение…

2. Это может привести к 'day' нулевым или отрицательным значениям.