【问题标题】:how to find weekdays from specific week in Flutter?如何在 Flutter 中查找特定周的工作日?
【发布时间】:2020-02-13 10:57:28
【问题描述】:

例如 20.week 包含 2020 年 5 月 11 日 - 2020 年 5 月 17 日

代码必须显示这些日期范围。但代码显示: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;
}

有人可以帮忙吗?

【问题讨论】:

    标签: datetime flutter week-number


    【解决方案1】:

    The ISO 8601 definition for week 01 is the week with the Gregorian year's first Thursday in it.

    我们需要知道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));
    }
    

    【讨论】:

    • 感谢您的回答。您的代码在 2020 年运行顺利,但在 2021 年无法运行
    • 编辑startOfaYear.add(Duration(days: 8 - startOfaYearWeekDay));
    【解决方案2】:

    这应该可行

    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;
    }
    

    【讨论】:

    • 您的代码输出是第 1 周的开始日期:2020-01-01 第 1 周的结束日期:2020-01-01 但它应该开始于:第 2 周的开始日期:2019-12 -30 第 1 周结束日期:2020-01-05,感谢关注。
    • 我更新了代码,我使用 -1 作为开始,因为今年从星期三开始,为了匹配输出,它应该添加 5 以匹配开始日期
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2012-02-05
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多