Dart / Flutter получают первое DateTime на этой неделе - PullRequest
1 голос
/ 13 июля 2020

Используя флаттер на android Я пытаюсь получить первую дату текущей недели. Например, сегодня 13/7/2020, при условии, что неделя начинается с субботы, первая дата текущей недели будет 11/7/2020.

Например, чтобы получить первую дату месяца

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

Конечная цель состоит в том, чтобы получить метку времени этой даты и извлечь записи из базы данных sqflite, которые выше этого значения.

Ответы [ 3 ]

4 голосов
/ 13 июля 2020

Если воскресенье - ваш первый день недели.

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));
0 голосов
/ 13 июля 2020

Для воскресенья:

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);
0 голосов
/ 13 июля 2020

Класс 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');
}
...