iOS 获取某年有几周,获取某年某周的日期范围

骑猪看日落 2024-04-20 08:27 153阅读 0赞
  1. //NSString转NSDate
  2. +(NSDate *)dateFromString:(NSString *)dateString DateFormat:(NSString *)DateFormat{
  3. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  4. [dateFormatter setDateFormat:DateFormat];
  5. NSDate *destDate= [dateFormatter dateFromString:dateString];
  6. return destDate;
  7. }
  8. //获取年月日对象
  9. +(NSDateComponents *)getDateComponents:(NSDate *)date {
  10. NSCalendar *calendar = [NSCalendar currentCalendar];
  11. // [calendar setFirstWeekday:2]; //设置每周的开始是星期一
  12. // [calendar setMinimumDaysInFirstWeek:7]; //设置一周至少需要几天
  13. return [calendar components:
  14. NSYearCalendarUnit|
  15. NSMonthCalendarUnit|
  16. NSDayCalendarUnit|
  17. NSWeekOfYearCalendarUnit|
  18. NSQuarterCalendarUnit fromDate:date];
  19. }
  20. //获得某年的周数
  21. +(NSInteger)getWeek_AccordingToYear:(NSInteger)year {
  22. NSDateComponents *comps = [DataTimeTool getDateComponents:[DataTimeTool dateFromString:[NSString stringWithFormat:@"%ld-12-31",year] DateFormat:@"yyyy-MM-dd"]];
  23. NSInteger week = [comps weekOfYear];
  24. if (week == 1) {
  25. return 52;
  26. }else {
  27. return week;
  28. }
  29. }
  30. /**
  31. * 获取某年某周的范围日期
  32. *
  33. * @param year 年份
  34. * @param weekofYear year里某个周
  35. *
  36. * @return 时间范围字符串
  37. */
  38. +(NSString*)getWeekRangeDate_Year:(NSInteger)year WeakOfYear:(NSInteger)weekofYear
  39. {
  40. NSString *weekDate = @"";
  41. NSString *timeAxis = [NSString stringWithFormat:@"%ld-06-01 12:00:00",(long)year];
  42. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  43. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  44. NSDate *date = [dateFormatter dateFromString:timeAxis];
  45. NSCalendar *calendar = [NSCalendar currentCalendar];
  46. /**这两个参数的设置影响着周次的个数和划分*****************/
  47. [calendar setFirstWeekday:2]; //设置每周的开始是星期一
  48. // [calendar setMinimumDaysInFirstWeek:7]; //设置一周至少需要几天
  49. NSDateComponents *comps = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay)
  50. fromDate:date];
  51. //时间轴是当前年的第几周
  52. NSInteger todayIsWeek = [comps weekOfYear];
  53. if ([DataTimeTool getWeek_AccordingToYear:year] == 53) {
  54. todayIsWeek += 1;
  55. }
  56. //获取时间轴是星期几 1(星期天) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
  57. NSInteger todayIsWeekDay = [comps weekday];
  58. // 计算当前日期和这周的星期一和星期天差的天数
  59. //firstDiff 星期一相差天数 、 lastDiff 星期天相差天数
  60. long firstDiff,lastDiff;
  61. if (todayIsWeekDay == 1) {
  62. firstDiff = -6;
  63. lastDiff = 0;
  64. }else
  65. {
  66. firstDiff = [calendar firstWeekday] - todayIsWeekDay;
  67. lastDiff = 8 - todayIsWeekDay;
  68. }
  69. NSDate *firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*firstDiff sinceDate:date];
  70. NSDate *lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*lastDiff sinceDate:date];
  71. long weekdifference = weekofYear - todayIsWeek;
  72. firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:firstDayOfWeek];
  73. lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:lastDayOfWeek];
  74. weekDate = [NSString stringWithFormat:@"(%@~%@)",[DataTimeTool stringFromDate:firstDayOfWeek DateFormat:@"y年M月d日"],[DataTimeTool stringFromDate:lastDayOfWeek DateFormat:@"y年M月d日"]];
  75. //weekDate = [NSString stringWithFormat:@"第%ld周(%@-%@)",weekofYear,[DataTimeTool stringFromDate:firstDayOfWeek DateFormat:@"yyyy年M月d号"],[DataTimeTool stringFromDate:lastDayOfWeek DateFormat:@"yyyy年M月d号"]];
  76. return weekDate;
  77. }

发表评论

表情:
评论列表 (有 0 条评论,153人围观)

还没有评论,来说两句吧...

相关阅读