Задачи на дату/время в Dart. Часть 8
Создайте функцию String relativeDay(DateTime date), которая сравнивает дату с DateTime.now() (только year/month/day) и возвращает 'сегодня', 'вчера', 'завтра' или строку формата dd.MM.yyyy для остальных дней.
Сделайте функцию, возвращающую количество полных лет между датами.
Сделайте функцию, проверяющую, попадает ли время в рабочие часы.
Создайте упрощённый cron-подобный парсер: функция принимает строку вида 'минута час' (например, '30 14' — каждый день в 14:30) и DateTime now, возвращает true, если текущие минута и час совпадают. Поддержите '*' как «любое значение».
bool matchesCron(String expr, DateTime now) { /* ... */ }
// matchesCron('30 14', DateTime(2024, 1, 1, 14, 30)) -> true
// matchesCron('* 14', DateTime(2024, 1, 1, 14, 5)) -> true
Сделайте функцию, возвращающую timestamp начала дня.
Сделайте функцию, возвращающую timestamp конца дня.
Работа с DateTime и List: из списка дат удалите прошедшие относительно DateTime.now(), отсортируйте оставшиеся по возрастанию и верните ближайшие 3.
List<DateTime> dates = [
DateTime(2020, 1, 1),
DateTime.now().add(Duration(days: 1)),
DateTime.now().add(Duration(days: 5)),
DateTime.now().add(Duration(hours: 2)),
];
Создайте календарь событий на Map<DateTime, List<String>> (ключ — дата без времени). Реализуйте добавление события на день и получение списка дел на указанную дату.
Комплексная задача — планировщик: храните задачи как Map<DateTime, List<String>>. Добавьте функции: добавить задачу, показать задачи на сегодня, показать просроченные (дата раньше сегодняшней) и ближайшую будущую задачу.
Итоговая задача на DateTime в Dart.