flutter - Flutter - 需要所有 7 个星期六的日期
问题描述
我试图让所有 7 个星期六的日期都比今天的日期少。
表示今天的日期是 9 月 22 日,因此需要所有 7 个星期六,即 18/09/2021,11/09/2021,04/09/2021,28/08/2021,21/08/2021,14/08/2021,07/ 08/2021。
所以这是我尝试过的代码,但在这里,我打印了两次日期。
import 'package:intl/intl.dart';
void main() {
findLastOfPreviousWee2(DateTime dateTime) {
var dayOfWeek = 6;
print(dateTime.weekday);
return dateTime.subtract(Duration(days: dateTime.weekday - dayOfWeek));
}
findLastOfPreviousWee1(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWee2(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWee1(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek1(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWeek(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek2(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWeek1(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek3(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWeek2(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek4(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWeek3(sameWeekDayOfLastWeek);
}
findLastOfPreviousWeek5(DateTime dateTime) {
var sameWeekDayOfLastWeek =
dateTime.subtract(const Duration(days: 6));
print(sameWeekDayOfLastWeek);
return findLastOfPreviousWeek4(sameWeekDayOfLastWeek);
}
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWee2(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWee1(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek1(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek2(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek3(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek4(DateTime.parse('20210922'))));
print(DateFormat('dd/MM/yyyy')
.format(findLastOfPreviousWeek5(DateTime.parse('20210922'))));
}
我在飞镖垫上跑过这个。
我只是想从今天的日期或小于今天的日期开始获取最后 7 个星期六的日期。
解决方案
那很有趣 !
对我来说有两个重要的元素:
- 如何获得上一个星期六
- 如何获得前x个星期六
1.如何获取上周六
在这里,您需要了解一些关于模数的知识,诀窍是找到从给定日期中减去的天数以找到上一个星期六:
DateTime findPreviousSaturday({required DateTime from}) {
// Get the number of days to go back to find a saturday
final daysFromSaturday = (from.weekday - DateTime.saturday) % 7;
return from.subtract(Duration(days: daysFromSaturday));
}
如何获得前x个星期六
在这里你可以写 7 次相同的东西,或者应用编程的第一定律:偷懒。您可以创建一个递归函数,给定 acount
将返回count
给定日期的前一个星期六。这是它的工作原理:
- 如果 count = 0,则返回一个空列表
- 否则,返回前一个星期六使用并从前一周
findPreviousSaturday
获取星期六count - 1
这是代码:
List<DateTime> findPreviousSaturdays({
required int count,
DateTime? from,
}) {
// End recursion
if (count == 0) {
return [];
}
// Defaults to now
final _from = from ?? DateTime.now();
return [findPreviousSaturday(from: _from)] +
findPreviousSaturdays(
count: count - 1,
from: _from.subtract(Duration(days: 7)),
);
}
享受
要使用它,只需调用:
void main() {
print(findPreviousSaturdays(count: 7));
}
几乎没有工作,您可以将其扩展到一周中的任何一天:)
推荐阅读
- machine-learning - 回归如何在 XGboost 中工作?
- angular - app.component 之前的角度组件加载
- java - 在 Google Cloud Storage 中上传的 PDF 始终显示空白页
- google-apps-script - 加速 Google 脚本值访问和元数据?
- angular - 用户打开新标签时如何重置会话/本地存储?
- amp-html - 我们如何捆绑一个反应组件来使用 AMP 脚本
- c# - 在 ASP.NET Core 中发布没有表单的数据
- angular - 如何修复Angular中的经典锚方法(id-href)?
- c# - Asp .Net Identity 自定义 AspNetUser 主 id 字段值?
- magento - 从 magento 插件更改不生效,但从 magento\vendor 更改显示效果