通过当年第几天,获取日期的方法

输入参数是具体当年元旦的第几天,返回结果是当年的具体日期

因为不允许反馈未来的时间,而且有可能查询的日期是去年的
(允许返回未来一个月的日期,否则如果天数大于当前日期距离元旦的天数大于一个月,就返回去年的日期,因为有的时候,刚过新年,却想查询去年年底的日期)

- (NSString *)getDateStringFromDayNum:(NSInteger)days {
    days -= 1;
    if (days < 1 || days > 366) {
        NSLog(@"invalid date num");
        return nil;
    }
    //获取当前日期
    NSDate *now = [NSDate date];
    //获取当年元旦的日期
    NSDateFormatter *dateFormator = [[NSDateFormatter alloc]init];
    [dateFormator setDateFormat:@"yyyy"];
    NSString *currentYearFirstDayStr = [NSString stringWithFormat:@"%@-01-01",[dateFormator stringFromDate:now]];
    [dateFormator setDateFormat:@"yyyy-MM-dd"];
    NSDate *currentYearFirstDate = [dateFormator dateFromString:currentYearFirstDayStr];

    //获取今年已经过去了几天
    long dayPast = (long)[now timeIntervalSinceDate:currentYearFirstDate]/3600/24;

    if (days - dayPast > 31) { //只能输出未来一个月的日期,否则则认为是去年的时间
        //去年
        NSInteger lastYear = [[dateFormator stringFromDate:now] integerValue] - 1;
        NSString *lastYearFirstDayStr = [NSString stringWithFormat:@"%ld-01-01",(long)lastYear];
        NSDate *lastYearFirstDate = [dateFormator dateFromString:lastYearFirstDayStr];
        NSDate *returnDay = [NSDate dateWithTimeInterval:days * 24 * 3600 sinceDate:lastYearFirstDate];
        return [dateFormator stringFromDate:returnDay];
    } else {
        //今年
        NSDate *returnDay = [NSDate dateWithTimeInterval:days * 24 * 3600 sinceDate:currentYearFirstDate];
        return [dateFormator stringFromDate:returnDay];
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值