iOS:获取一周7天的日期(年-月-日-星期)
一、介绍
在开发中,日期的使用绝对是离不了的,跟业务的关联性太强了,例如课程表。有的时候我们不需要课程表,但是需要获取一周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天的日期(年-月-日-星期)的更多相关文章
- php通过某个日期段的周几,获取选中周几对应的日期
最近在做课程表的项目里用到了这个,有个日期段,选择好周几之后,想获取在这个日期段内选中的星期对应的日期,如下图,代码如下 function getDateByWeek($data) { $start_ ...
- iOS - 获取系统时间年月日,阳历(公历)日期转农历的方法
//获取当前时间 NSDate *now = [NSDate date]; NSLog(@" now date is: %@ ",now); NSCalendar *calenda ...
- sql获取该周的开始结束日期
mssql函数 IF EXISTS ( SELECT 1 FROM sysobjects WHERE name = 'fn_GetWeekDate') DROP FUNCTION fn_GetWeek ...
- oracle 日期取 月 日
今天碰到只要取月份和天数,如果月份前面有0要去掉0.比如说2010-01-08 ,需要的结果是1-8. 引出了一系列的sql语句 第一: 利用to_number的函数转换自动截0 select to_ ...
- JS - 获取当前的时间,并且转换成年 - 月 - 日格式!
先获取当前时间,并转换成年月日格式! function getNowFormatDate() { var date = new Date(); var seperator1 = "-&quo ...
- mysql 获取系统时间的下一天 年-月-日 时:分:秒
DAY) as date
- C语言根据日期(年,月,日)判断星期几(使用基姆拉尔森计算公式)
C语言根据日期判断星期几(使用基姆拉尔森计算公式) 算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数, ...
- PHP获取一年有几周以及每周开始日期和结束日期
最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期.在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期 代码一 ...
- [Java] 获取本月周次和日期时间段信息
package com.wdcloud.monitoring.common; import java.text.SimpleDateFormat; import java.util.ArrayList ...
随机推荐
- 如何将Azure SQL 数据库还原到本地数据库实例中
原文:https://www.jerriepelser.com/blog/restore-sql-database-localdb/ 原文作者: Jerrie Pelser 译文:如何将Azure S ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 11
23.6 使用第三方接口服务实例 接供服务的第三方接口平台有很多,现在的项目中也经常用到一些第三方接口,如支付宝.微信.短信.邮件接口等,我们需要借助第三方的能力来实现产品的某些功能.如果自己已经掌 ...
- 前端笔记之React(一)初识React&组件&JSX语法
一.React项目起步配置 官网:https://reactjs.org/ 文档:https://reactjs.org/docs/hello-world.html 中文:http://react.c ...
- c#汉字转拼音首字母全拼支持多音字
1.首先在NuGet安装pingyinConverter 2.下载-安装-引用ChineseChar.dll到项目中 官网了解:http://www.microsoft.com/zh-cn/downl ...
- jQuery 源码分析(十一) 队列模块 Queue详解
队列是常用的数据结构之一,只允许在表的前端(队头)进行删除操作(出队),在表的后端(队尾)进行插入操作(入队).特点是先进先出,最先插入的元素最先被删除. 在jQuery内部,队列模块为动画模块提供基 ...
- Linux - 几种方法来实现scp拷贝时无需输入密码
前言 在实际工作中,经常会将本地的一些文件传送到远程的机器上.scp是一个很好用的命令,缺点是需要手工输入密码. 如何在shell脚本中实现传输文件,而不用手工输入密码呢?接下来介绍三种方法. 一.建 ...
- Spring Cloud Gateway入坑记
Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理.之前,很多网关应用使用的是Spring-Clou ...
- Python中字符的编码与解码
1 文本和字节序列 我们都知道字符串,就是由一些字符组成的序列构成串,那么字符又是什么呢?计算机只能识别二进制的东西,那么计算机又为什么会显示我们的汉字,或者是某个字母呢? 由于最早发明使用计算机是美 ...
- OpenGL光照3:光源
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...
- elasticsearch 心得
1.es 一台机器一般为一个节点.一台机器不设置的情况下是无法创建副本集的,副本集和主本必须不在一个节点下,方便故障转移等 2.es7.x后一个索引后只能创建一个类型,可以通过修改更改 出现这个的原因 ...