как найти будни из указанных c неделей во флаттере? - PullRequest
0 голосов
/ 13 февраля 2020

Например, 20. неделя содержит 11 мая 2020 г. - 17 мая 2020 г.

Код должен отображать эти диапазоны дат. Но код показывает: 2020-05-12 - 2020-05-18

Вот код

DateTime getDateByWeekNumber({
  int week,
  int year,
  bool start
}) {
  DateTime date;
  var days = ((week - 1) * 7) + (start ? 0: 6);
  date = DateTime.utc(2020, 1, days);
  return date;
}

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Определение ISO 8601 для недели 01 - это неделя с первым четвергом григорианского года.

Нам нужно выяснить, предшествует ли first day of a year Thursday

DateTime getDateByWeekNumber({int week, int year, bool start}) {
  DateTime startOfaYear = DateTime.utc(year, 1, 1);
  int startOfaYearWeekDay = startOfaYear.weekday;
  DateTime firstWeekOfaYear = startOfaYearWeekDay < 4
      ? startOfaYear.subtract(Duration(days: startOfaYearWeekDay - 1))
      : startOfaYear.add(Duration(days: 8 - startOfaYearWeekDay));
  DateTime startOfNWeek = firstWeekOfaYear.add(Duration(days: (week - 1) * 7));
  return start ? startOfNWeek : startOfNWeek.add(Duration(days: 6));
}
0 голосов
/ 13 февраля 2020

Это должно работать

DateTime getDateByWeekNumber({int week, int year, bool start}) {
 DateTime date;
 var days = ((week - 1) * 7) + (start ? -1 : 5);
 date = DateTime.utc(2020, 1, days);
 return date;
}
...