Dart - разделить таймфрейм по дням - PullRequest
0 голосов
/ 03 июня 2019

У меня есть два DateTimes, указывающие начало и конец события.Я пытаюсь разделить время между этими двумя датами на дни:

DateTime start = DateTime.parse(event.startDate);
DateTime end = DateTime.parse(event.stopDate);

Я пытался сделать цикл while, а затем вызывать currentDate.add(Duration(days: 1)) до currentDate.isBefore(end) Сложность, с которой я сталкиваюсь, заключается в том, что началодата может быть, например, в 16:00, тогда первый день должен быть от 16:00 до 00:00 сегодня.То же самое в последний день, оно может закончиться в любое время:

Пример:

12:00 01.06.2019 - 9:00 03.06.2019 

Результат:

[(12:00 01.06.2019, 00:00 02.06.2019), (00:00 02.06.2019, 00:00 03.06.2019), (00:00 03.06.2019, 09:00 03.06.2019)]

1 Ответ

1 голос
/ 03 июня 2019

Я бы не стал использовать add, так как это может привести к вводящим в заблуждение результатам, когда дневное время начинается и заканчивается.Безопаснее использовать конструктор с day + 1.

Попробуйте:

main() {
  final start = DateTime(2019, 6, 1, 12);
  final end = DateTime(2019, 6, 3, 9);

  var midnight = DateTime(start.year, start.month, start.day);
  var nextMidnight = DateTime(midnight.year, midnight.month, midnight.day + 1);
  var endMidnight = DateTime(end.year, end.month, end.day);

  print('$start---$nextMidnight');

  do {
    midnight = nextMidnight;
    nextMidnight = DateTime(midnight.year, midnight.month, midnight.day + 1);
    print('$midnight---$nextMidnight');
  } while (nextMidnight.isBefore(endMidnight));

  print('$endMidnight---$end');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...