首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取给定月份的开始日期和结束日期的所有周(NSDate Objective C)

获取给定月份的开始日期和结束日期的所有周(NSDate Objective C)

在Objective-C中,可以使用NSCalendar和NSDateComponents类来获取给定月份的开始日期和结束日期的所有周。

首先,我们需要创建一个NSCalendar对象,并设置它的firstWeekday属性为1,以确保每周的第一天是星期日。

代码语言:txt
复制
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
calendar.firstWeekday = 1;

接下来,我们需要创建一个NSDateComponents对象,并设置它的year和month属性为给定的年份和月份。

代码语言:txt
复制
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = year;
components.month = month;

然后,我们可以使用NSCalendar的rangeOfUnit:inUnit:forDate:方法来获取给定月份的起始日期和结束日期。

代码语言:txt
复制
NSDate *startDate;
NSDate *endDate;
[calendar rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:[calendar dateFromComponents:components]];
components.month += 1;
components.day -= 1;
[calendar rangeOfUnit:NSCalendarUnitDay startDate:NULL interval:NULL forDate:[calendar dateFromComponents:components]];
endDate = [endDate dateByAddingTimeInterval:24 * 60 * 60]; // 加一天,使结束日期包含在下个月

最后,我们可以使用NSCalendar的enumerateDatesStartingAfterDate:matchingComponents:options:usingBlock:方法来遍历每个周的起始日期和结束日期。

代码语言:txt
复制
NSMutableArray *weeks = [NSMutableArray array];
[calendar enumerateDatesStartingAfterDate:startDate matchingComponents:[NSDateComponents new] options:NSCalendarMatchNextTime usingBlock:^(NSDate * _Nullable date, BOOL exactMatch, BOOL * _Nonnull stop) {
    NSDate *weekStartDate;
    NSDate *weekEndDate;
    [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth startDate:&weekStartDate interval:NULL forDate:date];
    weekEndDate = [weekStartDate dateByAddingTimeInterval:6 * 24 * 60 * 60]; // 加六天,得到周的结束日期
    if ([weekEndDate compare:endDate] == NSOrderedDescending) {
        *stop = YES; // 停止遍历
    } else {
        [weeks addObject:@{@"start": weekStartDate, @"end": weekEndDate}];
    }
}];

现在,我们可以使用weeks数组来获取给定月份的所有周的起始日期和结束日期。

完整的代码示例如下:

代码语言:txt
复制
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
calendar.firstWeekday = 1;

NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = year;
components.month = month;

NSDate *startDate;
NSDate *endDate;
[calendar rangeOfUnit:NSCalendarUnitMonth startDate:&startDate interval:NULL forDate:[calendar dateFromComponents:components]];
components.month += 1;
components.day -= 1;
[calendar rangeOfUnit:NSCalendarUnitDay startDate:NULL interval:NULL forDate:[calendar dateFromComponents:components]];
endDate = [endDate dateByAddingTimeInterval:24 * 60 * 60];

NSMutableArray *weeks = [NSMutableArray array];
[calendar enumerateDatesStartingAfterDate:startDate matchingComponents:[NSDateComponents new] options:NSCalendarMatchNextTime usingBlock:^(NSDate * _Nullable date, BOOL exactMatch, BOOL * _Nonnull stop) {
    NSDate *weekStartDate;
    NSDate *weekEndDate;
    [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth startDate:&weekStartDate interval:NULL forDate:date];
    weekEndDate = [weekStartDate dateByAddingTimeInterval:6 * 24 * 60 * 60];
    if ([weekEndDate compare:endDate] == NSOrderedDescending) {
        *stop = YES;
    } else {
        [weeks addObject:@{@"start": weekStartDate, @"end": weekEndDate}];
    }
}];

这样,我们就可以使用weeks数组获取给定月份的所有周的起始日期和结束日期了。

注意:以上代码示例中,并未提及腾讯云相关产品和产品介绍链接地址,因为与获取给定月份的开始日期和结束日期的所有周无直接关联。如需了解腾讯云相关产品和产品介绍,请参考腾讯云官方文档或咨询腾讯云官方客服。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • DateTools,可能是最好用的iOS日期工具库

    项目简介 DateTools 用于提高Objective-C中日期和时间相关操作的效率.灵感来源于 DateTime和Time Period Library....安装 使用 Cocoapods 安装 pod 'DateTools' NSDate+DateTools DateTools让NSDate功能更完整,可以让你更容易地去获取日期各个组件的信息,如年 月 日等...如果想获取两个日期具体的差值: 获取毫秒间隔可以使用 NSDate 提供的 timeIntervalSinceDate:和 timeIntervalSinceNow 方法;获取相差多少年/月/周/日/...,但支持手动排序;拥有自己的属性,比如基于内粗存储的时间段计算出的此集合的开始时间和结束时间.这个结合允许存储有交集的时间段....DTTimePeriodChain集合通常依据开始和结束时间存储时间段对象,并且有自己的属性,如 根据内部存储的时间段对象推断出来的此集合的开始时间和结束时间.

    1.7K100

    时间与日期处理

    、周、季度等的类 NSCalendar -- 日历类,它提供了大部分的日期计算接口,并且允许您在NSDate和NSDateComponents之间转换 NSDateFormatter -- 用来在日期和字符串之间转换...要取得参数时间点所对应的月份下,"周"(Week)的取值范围。需要注意的是结果会受到minimumDaysInFirstWeek属性的影响。...下面是一个示例日历图: 在上图的日期条件下,假如提供的参数是4月1日--4月6日,那么对应的week就是1(第一个周),可以看到第一个周包含有6天,从1号开始,那么最终得到的范围值为1--6。...假如提供的参数是4月18日,那么对应的week是3(第三个周),第三个周包含有7天,从14号开始,那么最终得到的范围值是14--7。...假如是1月8日,那么w=2(这一年的第二个周) W -- 月份包含的周(与日历排列有关) 假如是2013年4月21日,那么W=4(这个月的第四个周) F -- 月份包含的周(与日历排列无关) 和上面的

    3.3K70

    仿微信的IM聊天时间显示格式(含iOSAndroidWeb实现)

    所以,市面上几乎所有的IM都会对聊天消息的时间显示格化做人性化处理,从而提升用户体验(使用感受会明显友好)。 这两天正在继续开发RainbowChat-Web产品,所以正需要这样的代码。...; 2)当聊天消息的时间大于一周时:直接显示“年/月/日 时:分”的完整时间格式。...                        longdelta = (currentTimestamp - srcTimestamp);                         // 当天(月份和日期一致才是...(首页) ▲ 上述代码在RainbowChat Android版上的运行效果(聊天界面) 6、iOS平台上的代码实现(Objective-C) 6.1 完整源码 源文件TimeTool.h: #import...getIOSTimeStamp_l:dt];         // 相差时间(单位:秒)         longdelta = currentTimestamp - srcTimestamp;         // 当天(月份和日期一致才是

    4.5K50

    又肝了3天,整理了80个Python DateTime 例子,必须收藏!

    从特定日期获取周的开始和结束日期 两个日期之间的差异(以秒为单位) 以这种格式获取昨天的日期MMDDYY 从今天的日期获取上周三 所有可用时区的列表打印 获取指定开始日期和结束日期之间的日期范围 毫秒转换为数据...将 N 秒数添加到特定日期时间 从当前日期获取两位数的月份和日期 从特定日期获取月份数据的开始和结束日期 以周为单位的两个日期之间的差异 将字符串格式的日期转换为 Unix 时间戳 获取最后一个周日和周六的日期...、月、日、时、分、秒的 N 个数字添加到当前日期时间 获取指定开始日期和结束日期之间的日期范围 减去 N 个年、月、日、时、分、秒到当前日期时间 获取指定年份和月份的月份第一天的工作日和月份的天数 打印特定年份的所有星期一...打印特定年份的日历 从月份编号中获取月份名称 从给定日期获取一周的开始和结束日期 根据当前日期查找上一个和下一个星期一的日期 获取当前季度的第一个日期和最后一个日期 1使用 time 模块展示当前日期和时间...Jun - June Jul - July Aug - August Sep - September Oct - October Nov - November Dec - December 78从给定日期获取一周的开始和结束日期

    8.8K30

    iOS开发一款小巧简洁的日历控件 原

    年来确定月份天数,另外一种模式是通过NSDate这个时间类,来获取日历的信息。...2、我们需要实现的功能 (1)每行7天,对应星期,列数为将当前月显示完全 (2)今日标红 (3)点击的日期背景填充 (4)提供特殊标记,用于标记计划日,节日等 (5)左右无限翻页,直到世界起源和末日  ...; /**  *获取本月第一天  */ - (NSDate *)YHBaseFirstDayOfCurrentMonth; //下面这些方法用于获取各种整形的数据 /**  *确定某天是周几  */ -...;     //获取当前月有多少天     int monthNum = (int)[currentDate YHBaseNumberOfDaysInCurrentMonth];     //获取第一天的日期...1:0;     //开始创建按钮     /**      *这里的逻辑是有问题的,应该设计成cell的复用机制,而不应该重复耗性能的创建 有时间在优化      */ #warning 可以优化哦

    3.6K20

    提升日期处理效率:day.js 实战经验分享

    还有年、日、周、时分秒等其他配置和获取的方法,请参考 文档。 日期时间计算 日期计算是工作中常用的功能,比如计算3天后的日期是多少。day.js 提供了很多方便的方法。...增加日期时间 给定一个日期,希望获取该日期的后几天,或者想获取当前时间的半小时后的时间,就可以使用 add() 方法。 add() 方法接收2个参数: 第一个参数是要增加的时间,可以是负值。...hh:mm:ss') 获取开始日期时间 使用 startOf() 方法可以获取开始时间日期。...2023年5月21号是星期1 获取结束日期时间 有获取开始日期时间就有获取结束日期时间。 day.js 提供了 endOf() 方法获取结束日期时间。 比如要获取当前日期的 23:59:59。...dayjs().endOf('day').format() endOf() 通常会和 startOf() 结合使用,这样就可以获取一个比较完整的时间段。 比如要获取 2020年2月的开始和结束日期。

    2.3K30

    鸿蒙开发实战案例:日历切换案例

    点击“周”按钮,可从月视图切换到周视图,周视图展示的周信息根据月视图之前选中的日期进行跳转。周视图左右滑动可切换下一周和上一周。...周视图上选中日期后,点击“月”按钮,可从周视图切换到月视图,月视图展示的月份信息根据周视图之前选中的日期进行月份跳转。...点击“年”按钮,可从月视图或周视图切换到年视图,年视图展示的年数据根据月视图或周视图之前选中的日期(不选默认今天)所在年份显示对应的年视图数据。年视图左右滑动可切换下一年和上一年。...点击年视图上某个月,会自动切换并显示对应月份的月视图。点击“月”或“周”按钮从年视图切换到月视图或周视图,会根据之前月视图或周视图选中的日期切换到对应月或周。...这里参考日历三方库@xsqd/calendar的部分源码使用两个ForEach循环实现日历的月视图和周视图的日期布局效果。通过CalendarViewType条件渲染对应的月视图或周视图。

    9120

    【重学 MySQL】三十二、日期时间函数

    FROM_UNIXTIME(timestamp) 将UNIX时间戳的时间转换为普通格式的时间 获取月份、星期、星期数、天数等函数 函数 用法 YEAR(date) / MONTH(date) / DAY...DAYOFMONTH(date) 返回日期位于所在月份的第几天 DAYOFWEEK(date) 返回周几,注意:周日是1,周一是2,。。。...date所在月份的最后一天的日期 MAKEDATE(year,n) 针对给定年份与所在年份中的天数返回一个日期 MAKETIME(hour,minute,second) 将给定的小时、分钟和秒组合成时间并返回....,…) %c 数字表示月份(1,2,3,…) %D 英文后缀表示月中的天数(1st,2nd,3rd,…) %d 两位数字表示月中的天数(01,02…) %e 数字形式表示月中的天数(1,2,3,4,5...(1,2,3,4…) %i 两位数字表示分钟(00,01,02) %S和%s 两位数字表示秒(00,01,02…) %W 一周中的星期名称(Sunday…) %a 一周中的星期缩写(Sun.

    7810

    MySQL中日期和时间函数学习--MySql语法

    以下说明符可用在 format 字符串中: 说明符 说明 %a 工作日的缩写名称 (Sun..Sat) %b 月份的缩写名称 (Jan..Dec) %c 月份,数字形式(0..12) %D 带有英语后缀的该月日期...月份和日期说明符的范围从零开始,原因是 MySQL允许存储诸如 '2004-00-00'的不完全日期. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',...str所包含的日期、时间或日期时间值应该在format指示的格式中被给定。对于可用在format中的说明符,请参见DATE_FORMAT() 函数说明表。所有其它的字符被逐字获取,因此不会被解释。...假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0、2、5或 7 作为mode参数选择。...WEEK() 返回给定年份的语境中的周。

    1.9K40

    质量看板开发实践(三):bug柱状图

    、按月查询、按周查询、自定义日期范围; 能够切换项目; 刷新当前页面,自动触发查询请求; 切换日期维度,自动触发查询请求; 切换项目,自动触发查询请求; 显示查询结果总数; 最好可以把柱状图和折线图结合起来...end_date_to_datetime是从前端读取的结束日期 dates是一个日期范围列表,它记录了从开始日期到结束日期这个范围内的每一天的日期 result是最终返回的结果,它由一个个小的字典构成...,因为它们的横轴都具体到某一天 只要拿到开始日期,就能计算得到结束日期,具体过程可以看注释,注释写的很详细 按年查询有一点区别,我希望按年查询时,横轴是一年的12个月份 由于从jira查询到的bug数据是具体到某一天的...,所以得到1年365天的bug数据后,需要对它们进行聚合,以月份进行分组求和 这就很麻烦了,想了很久才找到解决方法,步骤如下 ①从jira提取bug数据后,把日期和bug数分别存到一个列表中,对日期列表进行切割...,我给定的默认值为"day" 所以在这个方法中,给日期范围赋一个初始值,这样每次刷新页面,日期组件就能得到初始范围 // 定义一个方法,实现给定日期范围默认值,触发请求 refresh_page

    3.2K100

    质量看板开发实践(三):bug柱状图

    按月查询、按周查询、自定义日期范围; 能够切换项目; 刷新当前页面,自动触发查询请求; 切换日期维度,自动触发查询请求; 切换项目,自动触发查询请求; 显示查询结果总数; 最好可以把柱状图和折线图结合起来...end_date_to_datetime是从前端读取的结束日期 dates是一个日期范围列表,它记录了从开始日期到结束日期这个范围内的每一天的日期 result是最终返回的结果,它由一个个小的字典构成...,因为它们的横轴都具体到某一天 只要拿到开始日期,就能计算得到结束日期,具体过程可以看注释,注释写的很详细 按年查询有一点区别,我希望按年查询时,横轴是一年的12个月份 由于从jira查询到的bug数据是具体到某一天的...,所以得到1年365天的bug数据后,需要对它们进行聚合,以月份进行分组求和 这就很麻烦了,想了很久才找到解决方法,步骤如下 ①从jira提取bug数据后,把日期和bug数分别存到一个列表中,对日期列表进行切割...,我给定的默认值为"day" 所以在这个方法中,给日期范围赋一个初始值,这样每次刷新页面,日期组件就能得到初始范围 // 定义一个方法,实现给定日期范围默认值,触发请求 refresh_page

    4K10
    领券