繁体   English   中英

如何找到iPhone当周的最后一天?

[英]How to find last day of current week in iPhone?

在我的应用程序中,我使用以下代码来检索当前日期和日期

NSDate *today1 = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"dd/MM/yyyy :EEEE"];
    NSString *dateString11 = [dateFormat stringFromDate:today1];

    NSLog(@"date: %@", dateString11);
    //[dateFormat release];
    NSCalendar *gregorian11 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];  
    NSDateComponents *components1 = [gregorian11 components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today1];
    [components1 setDay:([components1 day]-([components1 weekday]-1))];

    NSDate *beginningOfWeek1 = [gregorian11 dateFromComponents:components1];
    NSDateFormatter *dateFormat_first = [[NSDateFormatter alloc] init];
    [dateFormat_first setDateFormat:@"dd/MM/yyyy :EEEE"];
    NSString *dateString_first = [dateFormat_first stringFromDate:beginningOfWeek1];

    NSLog(@"First_date: %@", dateString_first);

但使用上面的代码我只得到当天和日期和一周的第一天,但​​我需要得到一周的最后一天。

在我的代码中我错了,需要进行哪些修改才能获得最后一天/一周的日期?

对我来说,这有效:

计算一周的第一天

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents     = [gregorian components:NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];

计算从今天开始减去的天数,以便获得一周的第一天。 在这种情况下,一周的第一天是星期一。 这通过首先用工作日整数减去0然后向setDay添加2来表示。

星期日= 1,星期一= 2,星期二= 3,星期三= 4,星期四= 5,星期五= 6,星期六= 7.通过在此整数中添加更多,您将进入下周。

NSDateComponents *componentsToSubtract  = [[NSDateComponents alloc] init];
[componentsToSubtract setDay: (0 - [weekdayComponents weekday]) + 2];   
[componentsToSubtract setHour: 0 - [weekdayComponents hour]];
[componentsToSubtract setMinute: 0 - [weekdayComponents minute]];
[componentsToSubtract setSecond: 0 - [weekdayComponents second]];

创建一周中第一天的日期

NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0];

通过在第一天的日期添加6,我们可以在我们的示例周日获得最后一天。

NSDateComponents *componentsToAdd = [gregorian components:NSDayCalendarUnit fromDate:beginningOfWeek];
[componentsToAdd setDay:6];
NSDate *endOfWeek = [gregorian dateByAddingComponents:componentsToAdd toDate:beginningOfWeek options:0];

希望这可以帮助

试试这个。

[components1 setDay:([components1 day]-([components1 weekday]-1) + 6)];

NSDate *endOfWeek1 = [gregorian11 dateFromComponents:components1];
[components1 setDay:([components1 day]+([components1 weekday]+1))];

它会打印出来

日期:27/04/2010:周二周末:01/05/2010:周六

我写“周末”而不是第一天....

NSDateComponents *components2 = [gregorian11 components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today1];

    [components1 setDay:(([components2 day]-([components2 weekday]-7)))];

    NSDate *now =[gregorian11 dateFromComponents:components2]; 
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    [format setDateFormat:@"dd/MM/yyyy :EEEE"]; 
    NSString *dateString = [format stringFromDate:now]; 
    NSLog(@" week Last_date: %@", dateString);//here it gives me thursd

如果您有NSDate,则可以使用当前的NSCalendar来检索该日期的NSDateComponents。 将NSDateComponents的工作日设置为1(一周的第一天),创建一个副本,并将副本的工作日设置为7(一周的最后一天)。 然后使用NSCalendar将NSDateComponents转换回各自的NSDate对象,之后可以使用NSDateFormatter创建字符串表示形式。

此链接有一个关于如何获取日期工作日的示例:

http://stackoverflow.com/questions/1057349#1057405

vikingosegundo建议的另一种方法是获取开始和结束日期的范围rangeOfUnit:startDate:interval:forDate: . 它为您提供特定时间单位的开始和间隔。 有了它,很容易在使用过的日历中找到一周的开始,并添加范围-1以获得该周的最新秒数。

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSWeekCalendarUnit 
       startDate:&startOfTheWeek 
        interval:&interval 
         forDate:now];
//startOfWeek holds now the first day of the week, according to locale (monday vs. sunday)

endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval-1];
// holds 23:59:59 of last day in week.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM