【问题标题】:Dart/Flutter get first DateTime of this week [duplicate]Dart/Flutter 获得本周的第一个 DateTime [重复]
【发布时间】:2020-11-02 10:36:28
【问题描述】:

在 android 上使用颤振我试图获得本周的第一个日期。例如,今天是 2020 年 7 月 13 日,假设一周从星期六开始,那么当前一周的第一个日期将是 2020 年 11 月 7 日。

例如获取月份的第一个日期

DateTime firstDay = new DateTime(
  DateTime.now().year,
  DateTime.now().month,
  1,
); //get first date this month

最终目标是获取该日期的时间戳,并从 sqflite 数据库中获取高于该日期的条目。

【问题讨论】:

标签: datetime flutter dart


【解决方案1】:

获取一周中不同日期的不同日期。我们可以为此使用 isoweek 包。我们可以这样使用:-

                        Week currentWeek = Week.current(); 
                        Week weekFromIso = Week.fromISOString(currentWeek.toString());
                        print('Week from ISO string: $weekFromIso');


                        DateTime firstDay= weekFromIso.day(0);
                        String formattedDateFirst = DateFormat('EEE, d MMM').format(firstDay);

                        DateTime secondDay= weekFromIso.day(1);
                        String formattedDateSecond = DateFormat('EEE, d MMM').format(secondDay);

【讨论】:

    【解决方案2】:

    周日:

    DateTime today = DateTime.now();
    DateTime _firstDayOfTheweek =
            today.subtract(new Duration(days: today.weekday));
    print(_firstDayOfTheweek.day);
    

    星期一:

    DateTime _firstDayOfTheweek =
            today.subtract(new Duration(days: today.weekday - 1));
    print(_firstDayOfTheweek.day);
    

    周六:

    DateTime _firstDayOfTheweek =
            today.subtract(new Duration(days: today.weekday + 1));
    print(_firstDayOfTheweek.day);
    

    【讨论】:

    • 这对于周日或周六来说不太正确。如果当天是一周的开始,则此答案将返回这些案例的上一周的开始日期。
    【解决方案3】:

    如果星期天是你一周的第一天。

    var d = DateTime.now();
    var weekDay = d.weekday;
    var firstDayOfWeek = d.subtract(Duration(days: weekDay));
    

    根据 Flutter 文档weekDay 返回

    星期[星期一]..[星期日]。

    • 符合 ISO 8601
    • 一周从星期一开始,其值为 1。

    如果星期一是一周的第一天,那么

    var firstDayOfWeek = d.subtract(Duration(days: weekDay - 1));
    

    【讨论】:

    • 如果星期天是一周的第一天,如果今天已经是星期天,这个答案将返回上一个星期天。
    【解决方案4】:

    DateTime 类存储星期几的 int 常量,您可以使用这些常量来计算所需的开始日期。像这样的东西应该可以工作:

    void main() {
      var startOfWeek = DateTime.saturday;
      var currentDate = DateTime.now();
      var daysSince = currentDate.weekday + (DateTime.sunday - startOfWeek);
    
      var result = currentDate.subtract(Duration(days: daysSince));
    
      print('Date at start of week is $result');
    }
    

    【讨论】:

    • 如果今天正好是新一周的开始,上面的代码可以返回上一周的开始。
    猜你喜欢
    • 2023-03-04
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2020-05-09
    • 2014-08-26
    相关资源
    最近更新 更多