Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 打印当月每周的第一个星期一颤振/省道_Flutter_Date_Dart - Fatal编程技术网

Flutter 打印当月每周的第一个星期一颤振/省道

Flutter 打印当月每周的第一个星期一颤振/省道,flutter,date,dart,Flutter,Date,Dart,我的Flutter应用程序中有一个日历,我需要打印当前月份的周列表。但不是从每月的第一天开始,而是从每月的第一个星期一开始(例如2021年4月5日为2021年4月的第一个星期一)。然后我需要打印出该月接下来的几周,从周一开始。这包括本月最后一周之后的下一个月的几天(例如2021年4月26日至2021年5月02日)。它应该这样打印: 05 Apr - 11 Apr 12 Apr - 18 Apr 19 Apr - 25 Apr 26 Apr - 02 May 首先要弄清楚如何找出从一个给定的工作

我的Flutter应用程序中有一个日历,我需要打印当前月份的周列表。但不是从每月的第一天开始,而是从每月的第一个星期一开始(例如2021年4月5日为2021年4月的第一个星期一)。然后我需要打印出该月接下来的几周,从周一开始。这包括本月最后一周之后的下一个月的几天(例如2021年4月26日至2021年5月02日)。它应该这样打印:

05 Apr - 11 Apr
12 Apr - 18 Apr
19 Apr - 25 Apr
26 Apr - 02 May

首先要弄清楚如何找出从一个给定的工作日到该日当天或之后的周一有多少天。举例帮助;如果给定的工作日为:

  • 星期一,添加0天
  • 星期二,增加6天
  • 星期三,增加5天
  • 。。。等等
  • 星期天,增加1天
我们可以制作一个查找表,但我们也可以设计从给定的工作日到该日当天或之后的周一的偏移量(以天为单位),其形式为
(7-x)%7
其中,
x
对应于给定的工作日。我们希望该值周一为0,周二为1,依此类推,直到周日为6。Dart使用值1(
DateTime.monday
)到7(
DateTime.sunday
),因此我们可以通过
DateTime.weekday-DateTime.monday
轻松地将其映射到所需的值

计算该偏移量后,我们可以找到当前月份的第一天,添加该偏移量以找到该月的第一个星期一,然后您可以迭代添加7天,直到到达下一个月,我们可以使用from以您想要的方式格式化日期:

import'包:intl/intl.dart';
字符串formatDate(DateTime DateTime)=>DateFormat('dd MMM')。格式(DateTime);
void main(){
const one_day=持续时间(天数:1);
持续一周=持续时间(天数:7);
var now=DateTime.now();
var firstOfMonth=日期时间(now.year,now.month,1);
var firstMonday=firstOfMonth
.add(持续时间(天:(7-(firstOfMonth.weekday-DateTime.monday))%7);
var currentMonday=第一个星期一;
while(currentMonday.month==now.month){
var nextMonday=currentMonday.add(一周);
var nextSunday=下一个星期一减去(一天);
打印(${formatDate(当前星期一)}-${formatDate(下星期日)});
当前星期一=下一个星期一;
}
}