#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'
нулевым или отрицательным значениям.