【问题标题】:How to calculate all Mondays date between two date如何计算两个日期之间的所有星期一日期
【发布时间】:2015-12-28 13:56:00
【问题描述】:

在 coredata 中有两个不同的实体“ClassDetails”和“ClassSlots”需要来自“ClassSlots”实体的所有类插槽日期。在“ClassSlots”实体中有多个班级插槽,在“ClassDetails”实体中有班级开始日期和结束日期。场景就像在加课时只添加时间周日-周一-周二..格式。现在在获取时混淆了如何获取该特定类的开始日期和结束日期之间的那些日子(以日期格式)。

使用这段代码但没有得到预期的结果(dayId是这样的——0代表星期日,1代表星期一)

NSLog(@"Start date ==>%@ End date ==>%@ dayId ==>%@",startDate,endDate,dayId);

    NSDateFormatter *dateFormator = [[NSDateFormatter alloc] init];
    [dateFormator setDateFormat:@"yyyy-MM-dd"];

    NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[dateFormator dateFromString:startDate]];

    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setWeekOfYear:[components weekOfYear] + 1];
    [comps setWeekday:[components day]];
    [comps setYear:[components year]];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setFirstWeekday:[dayId intValue]+1];
    NSDate *date = [calendar dateFromComponents:comps];

    NSLog(@"date ==> %@",date);

【问题讨论】:

  • 结果是什么?你想要什么结果?
  • 课程中的所有时段日期,例如 - 该课程从 2015 年 12 月 1 日开始,到 2015 年 12 月 31 日结束,它有星期一的时间表,然后从 12 月 1 日返回所有星期一(日期格式), 2015 年至 2015 年 12 月 31 日
  • 尝试使用这个答案stackoverflow.com/a/33991698/3908884

标签: ios objective-c date


【解决方案1】:

在您的情况下,您正在检查从第一天到最后一天的整个月 - 因此您可以使用 NSCalendarrangeOfUnit API。

NSDate *aDate; // make this any date in the desired month
NSInteger numberOfDaysInMonth = [[NSCalendar currentCalendar]
    rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth
    forDate:aDate].length;

如果您知道该月的第一天是星期几,您可以自己完成其余的逻辑。

NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitMonth;
NSDateComponents *comps = [[NSCalendar currentCalendar]
    components:units fromDate:aDate];
comps.day = 1;
NSDate *firstDayInMonth = [[NSCalendar currentCalendar] dateFromComponents:comps];
comps = [[NSCalendar currentCalendar] 
    components: NSCalendarUnitWeekday fromDate:firstDayInMonth];
NSInteger weekdayOfFirstDayInMonth = comps.weekday;

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2012-01-28
    • 2017-05-02
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多