显示上个月的名称和年份

时间:2015-12-03 15:24:01

标签: ios objective-c nsdate

这里我使用一个标签来显示当前月份和年份。并且它有一个按钮可以移动到上个月。当用户按侧键时,它应显示上个月。

我只是为了展示当月。但无法移动并在同一标签上显示上个月。

NSDate *date = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat=@"MMMM";
NSString * monthString = [[dateFormatter stringFromDate:date] capitalizedString];
dateFormatter.dateFormat=@"yyyy";
NSString * yearString = [[dateFormatter stringFromDate:date] capitalizedString];
datelabel.text = [NSString stringWithFormat:@"%@ %@",monthString,yearString];

这是我按下按钮的方法:

- (IBAction)leftBtn:(id)sender {
}

- (IBAction)rightBtn:(id)sender {
}

所以在normal时,view load时应显示December, 2015。当用户按leftbuttondatelabel应显示november,2015。当用户从right buttonnovember month时,它也会显示december, 2015

我很困惑。请帮我解决,这是我的第一个问题。帮助我。谢谢!

2 个答案:

答案 0 :(得分:0)

使用实例变量存储当前日期。加载视图后,将其设置为NSDateComponents。更新当前代码,以便可以随时运行,并使用实例变量日期更新标签。

完成后,请更改设置代码,以便获取当前日期并使用{{1}}删除日期中的日期和时间,以便存储在实例变量中的日期是第一个这个月的某一天。测试以确保对用户起作用并且看起来相同。

现在,您的左右按钮可以使用日期组件在实例变量日期中添加或删除一个月,然后更新标签。

答案 1 :(得分:0)

您需要使用NSDateComponents

- (IBAction)rightBtn:(id)sender 
{

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MMMM yyyy"];
    NSDate *tempDate = [dateFormat dateFromString:datelabel.text];

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:1];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *newDate = [calendar dateByAddingComponents:dateComponents toDate:tempDate options:0];

    datelabel.text = [dateFormat stringFromDate:newDate];

}

和左键相同的东西

- (IBAction)leftBtn:(id)sender 
{

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MMMM yyyy"];
    NSDate *tempDate = [dateFormat dateFromString:datelabel.text];

    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:-1];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *newDate = [calendar dateByAddingComponents:dateComponents toDate:tempDate options:0];

    datelabel.text = [dateFormat stringFromDate:newDate];
}