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

    1.6K100

    时间与日期处理

    、季度等类 NSCalendar -- 日历类,它提供了大部分日期计算接口,并且允许您在NSDateNSDateComponents之间转换 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.2K70

    仿微信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.3K50

    又肝了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.7K30

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

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

    3.5K20

    提升日期处理效率: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.2K30

    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.1K100

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

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

    4K10

    python手把手教你获取某月第一天最后一天

    用几个简单示例来熟悉这个module,1.1 获取当前日期时间:import datetimenow = datetime.datetime.now()print(now)1.2 获取当前日期import...(dir(datetime))在 datetime 模块所有属性中,datetime 模块中最常用类是:datetime.datetime- 表示单个时间点,包括日期时间。...第一是000, 01, ..., 53%c适合本地时区时间日期表达形式Mon Sep 30 07:06:05 2013%x适合本地时区日期表达形式09/30/13%X适合本地时区时间表达形式07...:06:05%%%符合%1.4.2 strptime() 方法该方法从给定字符串(表示日期时间)创建对象。...显示给定月份 Python 日历该代码使用 Python 模块打印指定年份 (yy) 月份 (mm) 日历。在本例中,它将打印 2023 年 12 月日历。

    1.9K10

    PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】

    分享给大家供大家参考,具体如下: 时间函数是PHP里面的日常函数,时间默认时期,今天、昨天、明天 、上一、下一,本周开始时间结束时间;本月开始时间结束时间;上月开始时间结束时间,指定日期周一周日等等方法...;本月开始时间结束时间;上月开始时间结束时间 date_default_timezone_set('PRC'); //默认时区 /** * 功能:取得给定日期所在开始日期结束日期 * 参数:$gdate...日期,默认为当天,格式:YYYY-MM-DD * $first 一以星期一还是星期天开始,0为星期天,1为星期一 * 返回:数组array("开始日期", "结束日期"); * */ function...return array($st, $en,$last_st,$last_en);//返回开始结束日期 } echo implode("|", aweek("", 1)).'...日拿 到周一周日分别对应 2012-01-02 2012-01-04 原因为传进去方法为第53,但是年为2011年,所以认为2011第53,所以计算有误,解决方法为, 如果为大于10

    4.3K31
    领券