在一周内改变日期而不是在白天(change date in a week wise not in day wise)

编程入门 行业动态 更新时间:2024-10-24 10:18:55
在一周内改变日期而不是在白天(change date in a week wise not in day wise)

这里我用一些标签来显示日期。 我有2个箭头按钮后退和以前的日期。如下所示:

(button) < **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >(Button)

这是代码:

- (void)viewDidLoad { [super viewDidLoad]; firstdate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:-5 toDate:[NSDate date] options:nil]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM,yyyy"]; dateLabel.text = [dateFormat stringFromDate:[NSDate date]]; dateLabel.text = [dateFormat stringFromDate: firstdate]; [self dateChange]; } -(void)dateChange { NSArray *labelArray = @[flabel, slabel, tlabel, folabel, fivlabel,sixlabel]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSCalendar *calendar = [NSCalendar currentCalendar]; dateFormatter.dateFormat = @"ddMMM"; for (NSInteger i = 0; i < 6; ++i) { NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:firstdate options:nil]; UILabel *label = (UILabel *)labelArray[i]; label.text = [dateFormatter stringFromDate:nextDate]; if (i==5) { dateFormatter.dateFormat=@"MMM,yyyy"; dateLabel.text = [[dateFormatter stringFromDate:nextDate] capitalizedString]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd"]; if ([[dateFormat stringFromDate:nextDate] isEqualToString:[dateFormat stringFromDate:[NSDate date]]]) { leftBtn.enabled = false; //It's the same day } else { leftBtn.enabled = true; } } } } - (IBAction)calRight:(id)sender { firstdate = [NSDate dateWithTimeInterval:86400 sinceDate:firstdate]; [self dateChange]; } - (IBAction)calLeft:(id)sender { firstdate = [NSDate dateWithTimeInterval:-86400 sinceDate:firstdate]; [self dateChange]; }

上面的代码将起作用,如果我按下后退按钮它会逐个更改日期:

< **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >

现在,如果我按左箭头:

< **26Dec 27Dec 28Dec 29Dec 30Dec 31Dec** >

但是,当我按下左箭头或右箭头时,我需要一周一周这样:

< **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >

现在,如果我按左箭头:

< **21Dec 22Dec 23Dec 24Dec 25Dec 26Dec** >

现在,如果我再次按向左箭头,它应该是这样的:

< **16Dec 16Dec 17Dec 18Dec 19Dec 20Dec** >

请问我需要改变什么来改变星期的日期。请帮助我!

Here i use Some label to display the date . And i have 2 arrow button to move back and previous dates.Like below:

(button) < **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >(Button)

Here is the code for that:

- (void)viewDidLoad { [super viewDidLoad]; firstdate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:-5 toDate:[NSDate date] options:nil]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM,yyyy"]; dateLabel.text = [dateFormat stringFromDate:[NSDate date]]; dateLabel.text = [dateFormat stringFromDate: firstdate]; [self dateChange]; } -(void)dateChange { NSArray *labelArray = @[flabel, slabel, tlabel, folabel, fivlabel,sixlabel]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSCalendar *calendar = [NSCalendar currentCalendar]; dateFormatter.dateFormat = @"ddMMM"; for (NSInteger i = 0; i < 6; ++i) { NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:firstdate options:nil]; UILabel *label = (UILabel *)labelArray[i]; label.text = [dateFormatter stringFromDate:nextDate]; if (i==5) { dateFormatter.dateFormat=@"MMM,yyyy"; dateLabel.text = [[dateFormatter stringFromDate:nextDate] capitalizedString]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd"]; if ([[dateFormat stringFromDate:nextDate] isEqualToString:[dateFormat stringFromDate:[NSDate date]]]) { leftBtn.enabled = false; //It's the same day } else { leftBtn.enabled = true; } } } } - (IBAction)calRight:(id)sender { firstdate = [NSDate dateWithTimeInterval:86400 sinceDate:firstdate]; [self dateChange]; } - (IBAction)calLeft:(id)sender { firstdate = [NSDate dateWithTimeInterval:-86400 sinceDate:firstdate]; [self dateChange]; }

The above code will work like if i press back button it will go by one by one date change:

< **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >

Now if i press left arrow:

< **26Dec 27Dec 28Dec 29Dec 30Dec 31Dec** >

But what i need if when i press left arrow or right arrow it should by week by week like this:

< **27Dec 28Dec 29Dec 30Dec 31Dec 1Jan** >

Now if i press left arrow:

< **21Dec 22Dec 23Dec 24Dec 25Dec 26Dec** >

Now if i press left arrow again its should like this:

< **16Dec 16Dec 17Dec 18Dec 19Dec 20Dec** >

Please what should i need to change to get like that to change date in week wise.Please help me!

最满意答案

如果您希望按钮将firstDate更改为7天而不是1天,请将按钮方法更改为:

- (IBAction)calRight:(id)sender { NSCalendar *calendar = [NSCalendar currentCalendar]; firstdate = [calendar dateByAddingUnit:NSCalendarUnitDay value:7 toDate:firstdate options:nil]; [self dateChange]; } - (IBAction)calLeft:(id)sender { NSCalendar *calendar = [NSCalendar currentCalendar]; firstdate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:firstdate options:nil]; [self dateChange]; }

注意:使用86400的当前代码很糟糕。 切勿使用此类代码进行日期数学运算。

If you want the buttons to change firstDate by 7 days instead of one, change your button methods to:

- (IBAction)calRight:(id)sender { NSCalendar *calendar = [NSCalendar currentCalendar]; firstdate = [calendar dateByAddingUnit:NSCalendarUnitDay value:7 toDate:firstdate options:nil]; [self dateChange]; } - (IBAction)calLeft:(id)sender { NSCalendar *calendar = [NSCalendar currentCalendar]; firstdate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:firstdate options:nil]; [self dateChange]; }

Note: your current code using 86400 is bad. Never use such code to do date math.

更多推荐

本文发布于:2023-07-25 10:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1260031.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:是在   而不   一周内   白天   日期

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!