calendar_utils.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import 'package:shared/utils/date_time_utils.dart';
  2. DateTime addDay(DateTime date, int days) {
  3. return date.add(Duration(days: days));
  4. }
  5. DateTime subtractDay(DateTime date, int days) {
  6. return date.subtract(Duration(days: days));
  7. }
  8. //一周的第一天从哪里开始,Sun 还是 Mon
  9. DateTime firstDayOfWeek(DateTime date) {
  10. // 从星期一开始
  11. return date.subtract(Duration(days: date.weekday - 1));
  12. }
  13. //是否包含选中的日期
  14. bool hasSelectedDate(List<DateTime> list, DateTime selected) {
  15. for (DateTime date in list) {
  16. // 格式化日期并进行比较
  17. if (DateTimeUtils.formatDate(date, format: 'yyyyMMdd') == DateTimeUtils.formatDate(selected, format: 'yyyyMMdd')) {
  18. return true;
  19. }
  20. }
  21. return false;
  22. }
  23. // 检查日期是否小于今天
  24. bool isPastDate(DateTime now, DateTime date) {
  25. // 获取当前日期的凌晨时间
  26. DateTime todayMidnight = DateTime(now.year, now.month, now.day);
  27. // 判断给定日期是否小于今天的凌晨时间
  28. return date.isBefore(todayMidnight);
  29. }
  30. //检查日期是否大于Max日期
  31. bool isAfterMaxDate(DateTime max, DateTime date) {
  32. // 获取当前日期的凌晨时间
  33. DateTime maxMidnight = DateTime(max.year, max.month, max.day);
  34. // 判断给定日期是否大于指定日期的凌晨时间
  35. return date.isAfter(maxMidnight);
  36. }
  37. // =================================== 获取一周的数据 ↓ ===================================
  38. List<DateTime> getWeekdays(DateTime date, int at) {
  39. final first = firstDayOfWeek(date);
  40. if (at >= 0) {
  41. return _addWeek(first, at);
  42. } else {
  43. return _subtractWeek(first, -at);
  44. }
  45. }
  46. List<DateTime> _addWeek(DateTime date, int add) {
  47. final day = addDay(date, 7 * add);
  48. return _getWeekDaysAt(day);
  49. }
  50. List<DateTime> _subtractWeek(DateTime date, int subtract) {
  51. final day = subtractDay(date, 7 * subtract);
  52. return _getWeekDaysAt(day);
  53. }
  54. List<DateTime> _getWeekDaysAt(DateTime date) {
  55. return List.generate(7, (index) => index).map((index) => date.add(Duration(days: index))).toList();
  56. }
  57. // =================================== 获取二周的数据 ↓ ===================================
  58. List<DateTime> get2Weekdays(DateTime date, int at) {
  59. final first = firstDayOfWeek(date);
  60. if (at >= 0) {
  61. return _add2Week(first, at);
  62. } else {
  63. return _subtract2Week(first, -at);
  64. }
  65. }
  66. List<DateTime> _add2Week(DateTime date, int add) {
  67. final day = addDay(date, 14 * add);
  68. return _get2WeekDaysAt(day);
  69. }
  70. List<DateTime> _subtract2Week(DateTime date, int subtract) {
  71. final day = subtractDay(date, 14 * subtract);
  72. return _get2WeekDaysAt(day);
  73. }
  74. List<DateTime> _get2WeekDaysAt(DateTime date) {
  75. return List.generate(14, (index) => index).map((index) => date.add(Duration(days: index))).toList();
  76. }