一、介绍

在开发中,日期的使用绝对是离不了的,跟业务的关联性太强了,例如课程表。有的时候我们不需要课程表,但是需要获取一周7天的日期,这一周内的日期,我觉得有两种理解:

1、获取当天开始的一周日期,当天作为起点往后顺延的一周(红色的为当天),实现方法见如下代码:方式一:

2、获取一周内的日期,当天在这一周内,所在一周的第一天和最后一天, 不是作为起点往后顺延(红色的为当天),实现方法见如下代码:方式二:

二、代码(放在单例工具类HYWeekCalendarUitility实现)

1、工具类声明和实现

@interface HYWeekCalendarUitility : NSObject
@property (nonatomic, strong) NSArray *weeks;
@property (nonatomic, copy) NSString *firstDayDeteOfWeek;
@property (nonatomic, copy) NSString *nowDayDeteOfWeek;
@property (nonatomic, copy) NSString *lastDayDeteOfWeek;
+ (instancetype)shareInstance;
@end
+ (instancetype)shareInstance {
static HYWeekCalendarUitility *weekCalendarUitility = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
weekCalendarUitility = [[HYWeekCalendarUitility alloc] init];
//[weekCalendarUitility getDateWeeksDuraingToday];
[weekCalendarUitility getDateWeeksFromToday];
});
return weekCalendarUitility;
}
-(NSString *)transWeekName:(NSString *)orrignWeekName
{
NSString *targetWeekName = @""; //转换文案
if ([orrignWeekName isEqualToString:@"星期日"]) {
targetWeekName = @"周日";
}
else if ([orrignWeekName isEqualToString:@"星期一"]) {
targetWeekName = @"周一";
}
else if ([orrignWeekName isEqualToString:@"星期二"]) {
targetWeekName = @"周二";
}
else if ([orrignWeekName isEqualToString:@"星期三"]) {
targetWeekName = @"周三";
}
else if ([orrignWeekName isEqualToString:@"星期四"]) {
targetWeekName = @"周四";
}
else if ([orrignWeekName isEqualToString:@"星期五"]) {
targetWeekName = @"周五";
}else{
targetWeekName = @"周六";
} return targetWeekName;
}

2、方法实现

---方式一---

/**
* 模式一
* 获取当前时间开始的一周日期
* 注意:当天作为起点往后顺延的一周
*/
-(void)getDateWeeksFromToday{ //日历格式
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd"]; NSMutableArray *dateWeeks = [NSMutableArray array];
for (int i=; i<; i++) {
//这一天
NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday fromDate:[NSDate dateWithTimeIntervalSinceNow: * * * i]];
NSDate *date = [calendar dateFromComponents:components]; //年月日
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [dateFormatter stringFromDate:date];//几月几号 //星期
NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
[weekFormatter setDateFormat:@"EEEE"];
NSString *weekString = [self transWeekName:[weekFormatter stringFromDate:date]];//周几 NSString *date_weekStr = [NSString stringWithFormat:@"%@-%@",dateString,weekString];
[dateWeeks addObject:date_weekStr]; //赋值
if (i==) {
self.firstDayDeteOfWeek = [formater stringFromDate:date];
self.nowDayDeteOfWeek = [formater stringFromDate:date];
}else if (i==) {
self.lastDayDeteOfWeek = [formater stringFromDate:date];
}
} self.weeks = dateWeeks;
NSLog(@"----dateWeeks:%@------",dateWeeks);
}

---方式二---

/**
* 模式二
* 获取当前时间所在一周的第一天和最后一天, 也即一周的日期
* 注意:当天在这一周内,不是作为起点往后顺延
*/
- (void)getDateWeeksDuraingToday
{
//日历格式
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday
fromDate:now];
// 得到:今天是星期几
// 1(星期天) 2(星期二) 3(星期三) 4(星期四) 5(星期五) 6(星期六) 7(星期天)
NSInteger weekDay = [comp weekday];
// 得到:今天是几号
NSInteger day = [comp day]; NSLog(@"weekDay:%ld day:%ld",weekDay,day); // 计算当前日期和这周的星期一和星期天差的天数
long firstDiff,lastDiff;
if (weekDay == ) {
firstDiff = ;
lastDiff = ;
}else{
firstDiff = [calendar firstWeekday] - weekDay;
lastDiff = - weekDay;
}
NSLog(@"firstDiff:%ld lastDiff:%ld",firstDiff,lastDiff); // 一周日期
NSArray *dateWeeks = [self getCurrentWeeksWithFirstDiff:firstDiff lastDiff:lastDiff]; // 在当前日期(去掉了时分秒)基础上加上差的天数
NSDateComponents *firstDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[firstDayComp setDay:day + firstDiff];
NSDate *firstDayOfWeek= [calendar dateFromComponents:firstDayComp]; NSDateComponents *lastDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[lastDayComp setDay:day + lastDiff];
NSDate *lastDayOfWeek= [calendar dateFromComponents:lastDayComp]; NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd"];
NSLog(@"一周开始 %@",[formater stringFromDate:firstDayOfWeek]);
NSLog(@"当前 %@",[formater stringFromDate:now]);
NSLog(@"一周结束 %@",[formater stringFromDate:lastDayOfWeek]); NSLog(@"%@",dateWeeks); self.firstDayDeteOfWeek = [formater stringFromDate:firstDayOfWeek];
self.nowDayDeteOfWeek = [formater stringFromDate:now];
self.lastDayDeteOfWeek = [formater stringFromDate:lastDayOfWeek];
self.weeks = dateWeeks;
} //获取一周时间 数组
- (NSMutableArray *)getCurrentWeeksWithFirstDiff:(NSInteger)first lastDiff:(NSInteger)last{ NSMutableArray *eightArr = [[NSMutableArray alloc] init];
for (NSInteger i = first; i < last + ; i ++) {
//从现在开始的24小时
NSTimeInterval secondsPerDay = i * **;
NSDate *curDate = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateStr = [dateFormatter stringFromDate:curDate];//几月几号
//NSString *dateStr = @"5月31日";
NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
[weekFormatter setDateFormat:@"EEEE"];//星期几 @"HH:mm 'on' EEEE MMMM d"];
NSString *weekStr = [weekFormatter stringFromDate:curDate]; //转换文案
weekStr = [self transWeekName:weekStr]; //组合时间
NSString *strTime = [NSString stringWithFormat:@"%@-%@",dateStr,weekStr];
[eightArr addObject:strTime]; }
return eightArr;
}

iOS:获取一周7天的日期(年-月-日-星期)的更多相关文章

  1. php通过某个日期段的周几,获取选中周几对应的日期

    最近在做课程表的项目里用到了这个,有个日期段,选择好周几之后,想获取在这个日期段内选中的星期对应的日期,如下图,代码如下 function getDateByWeek($data) { $start_ ...

  2. iOS - 获取系统时间年月日,阳历(公历)日期转农历的方法

    //获取当前时间 NSDate *now = [NSDate date]; NSLog(@" now date is: %@ ",now); NSCalendar *calenda ...

  3. sql获取该周的开始结束日期

    mssql函数 IF EXISTS ( SELECT 1 FROM sysobjects WHERE name = 'fn_GetWeekDate') DROP FUNCTION fn_GetWeek ...

  4. oracle 日期取 月 日

    今天碰到只要取月份和天数,如果月份前面有0要去掉0.比如说2010-01-08 ,需要的结果是1-8. 引出了一系列的sql语句 第一: 利用to_number的函数转换自动截0 select to_ ...

  5. JS - 获取当前的时间,并且转换成年 - 月 - 日格式!

    先获取当前时间,并转换成年月日格式! function getNowFormatDate() { var date = new Date(); var seperator1 = "-&quo ...

  6. mysql 获取系统时间的下一天 年-月-日 时:分:秒

    DAY) as date

  7. C语言根据日期(年,月,日)判断星期几(使用基姆拉尔森计算公式)

    C语言根据日期判断星期几(使用基姆拉尔森计算公式) 算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数, ...

  8. PHP获取一年有几周以及每周开始日期和结束日期

    最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期.在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期 代码一 ...

  9. [Java] 获取本月周次和日期时间段信息

    package com.wdcloud.monitoring.common; import java.text.SimpleDateFormat; import java.util.ArrayList ...

随机推荐

  1. bootstrap去除自带15px内边距,去除container 15px padding

     壹 ❀ 问题 在使用bootstrap时,由于bootstrap槽宽特性,我们在布局时会发现container以及col-**-**左右都会自带15px的padding,有时候空间不足就想着怎么把b ...

  2. 【Oracle】Oracle常用命令整理(持续更新中)

    一些常用的操作命令记录 SQLPlus连接 sqlplus {username}/{password}@{ip}:{port}/{sid} 创建用户 create user testuser iden ...

  3. EventBus 使用/架构/源码分析

    EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信.EventBus以其简单易懂.优雅.开销小等优点而备受欢迎. github 地址:https://git ...

  4. 0x00007FFC8C5325E7 (ucrtbased.dll)处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

    此处为非“%s” 类型数据以“%s”类型打印错误. 需要仔细检查代码中数据类型错误.

  5. bootstrap 自定义模态窗口

    $(".classname").click(function () { $('#mymodel').modal('show'); alert('模态框打开了'); }); $('# ...

  6. MySQL 联表查询

    关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...

  7. WPF默认控件模板的获取和资源词典的使用

    一.获取默认的控件模板 WPF修改控件模板是修改外观最方便的方式,但是会出现不知道原来的控件的模板长什么样,或者想用来参考的,下面分享一下获取某控件默认控件模板的方式(已Button为例): 1.创建 ...

  8. C# 获取系统硬件可用信息

    如何获取系统可用磁盘和可用内存? 1 获取磁盘信息 这个有自带的 DriveInfo 可以用. DriveInfo 类 (System.IO) | Microsoft Docs 2 获取内存信息 参考 ...

  9. java基础(32):类加载、反射

    1. 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个C ...

  10. 深入理解JVM,类加载器

    虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称 ...