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 ...
随机推荐
- python 各层级目录下的import方法
---恢复内容开始--- 以前经常使用python2.现在很多东西都切换到了python3,发现很多东西还是存在一些差异化的.跨目录import是常用的一种方法,并且有不同的表现形式,新手很容易搞混. ...
- 安装torch
一.实验环境 1.Windows7x64_SP1 2.anaconda3.7 + python3.7(anaconda集成,不需单独安装) 二.问题描述 1.使用如下命令进行安装: pip3 inst ...
- IT兄弟连 Java语法教程 逻辑运算符
表8中显示的布尔逻辑运算符只能操作布尔类型的操作数,所有的二元逻辑运算符都可以组合两个布尔值,得到的结果为布尔类型. 表8 布尔逻辑运算符 布尔逻辑运算符”&“.”|“以及”^“,都会布尔值 ...
- 17-REST framework-Request与Response
1.Django REST framework提供的视图的主要作用 1.控制序列化器的执行(检验,保存,转换数据) 2.控制数据库查询的执行 Request与Response 1.Request RE ...
- 拎壶学python3-----(3)python之while循环用法
一.下边我们看一个简单的while循环 那怎么计数呢就让输入三次三次后退出: 二. 关于计数这个问题我们一起看一下 (1)关于计数如下: 我们发现这个计数根本停不下来,怎么才能搞成我们想要的计数次数呢 ...
- win7系统下安装Ubuntu18.04组成双系统
最近在闲鱼上花了350大洋淘到了一台tinkpad sl510,这大概是一台发布于2009年的一台电脑了吧,处理器是酷睿二t440,2Gddr3的显卡,让我有点意外的是这台电脑的硬盘是7200转的32 ...
- 两种查看EFCore生成Sql语句的方法
一.利用反射生成查询语句 该方法转载自:https://jhrs.com/2019/28488.html (略有修改) using Microsoft.EntityFrameworkCore.Quer ...
- 易优CMS:【小白学标签】之empty的基础用法
[基础用法] 名称:empty 功能:判断某个变量是否为空,可以嵌套到任何标签里面使用,比如:channel.type等 语法: {eyou:empty name='$eyou.field.seo_t ...
- Java 比较器
比较器 Arrays 类 主要功能: 完成所有与数组有关的操作的工具类 二分查找: 在一个有序的数字序列中进行二分查找 public static int binarySearch(数据类型 [] a ...
- swift(四)swift的广义匹配
//swift的广义匹配 let x = switch x { ...: println("个位数") ...: println("十位数") default: ...