回复一网友问答:
给定一个日期,获取这个日期的上月的月初和月末时间。比如有个时间 是2013-03-01 如何求的2013-02-01和2013-02-28?
//本文日期获取的是系统当前日期,需指定日期直接赋值 year month day即可
NSInteger year,month,day;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];;
NSDateComponents *comps = [[NSDateComponents alloc] init];
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
comps = [calendar components:unitFlags fromDate:now];
year = [comps year];
month = [comps month];
day = [comps day];
NSLog(@"现在是:%d年%d月%d日 ",year,month,day);
// month获取现在的月份,然后 判断是上个月份是否为12月
if (month!=1) {
// 如果mouth!=1,那么上个月月初为1号,年份不变
NSLog(@"上个月月初:%d年%d月1日 ",year,month-1);
// 处理上个月份为2月的特殊情况,
if (month!=3) {
// 如果上个月的月份为 4 6 9 11 月份,他们月末是30号
if (month == 5 || month==7 || month ==10 || month ==12) {
NSLog(@"上个月月末:%d年%d月30日 ",year,month-1);
}
else {
NSLog(@"上个月月末:%d年%d月31日 ",year,month-1);
}
}
// 如果本月是3月份,上个月为为2月份,闰年2月月末29天,非闰年28天
else {
if ((year%4==0 && year%100!=0) || year%400==0) {
NSLog(@"上个月月末:%d年%d月29日 ",year,month-1);
}
else {
NSLog(@"上个月月末:%d年%d月28日 ",year,month-1);
}
}
}
// 如果当前月份是1月,上个月份就是12月 year-1,month=12
else {
NSLog(@"上个月月初为 %d年12月1日",year-1);
NSLog(@"上个月月末为 %d年12月31日",year-1);
}
测试效果: