Dart/Flutter获取本周第一个日期时间

6

我正在使用Flutter在Android上尝试获取当前周的第一天日期。例如,今天是2020年7月13日,假设本周从星期六开始,则当前周的第一天日期将为2020年7月11日。

以下示例用于获取本月的第一天日期

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

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

请查看 https://pub.dev/packages/isoweek 的内容。 - Jens Becker
4个回答

17
如果星期日是你的一周的第一天。
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));

3
如果周日是一周的第一天,且当前日期已经是周日,那么这个答案将返回上一个周日。 - jamesdlin

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

1
这对于星期日或星期六来说并不完全正确。如果当前日期是一周的开始,那么对于这些情况,此答案将返回上一周的开始日期。 - jamesdlin

1
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');
}

如果当前日期恰好是新一周的开始,上述代码可能会返回上一周的开始。 - jamesdlin

0
获取一周中不同日期的方法。 我们可以使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接