iOS将计时器倒计时到指定日期

时间:2014-06-09 05:36:36

标签: ios

我发现this虽然非常好。它似乎对我不起作用。

以下是我对代码的修改:

-(void) updateCountdown
{

    NSString *dateString = @"2015-12-15 15:29:32";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *dateFromString = [[NSDate alloc] init];
    // voila!
    dateFromString = [dateFormatter dateFromString:dateString];

    NSDate *now = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSLog(@"DATE: %@ %@",now, dateFromString);

    NSDateComponents *componentMint = [calendar components:NSMinuteCalendarUnit fromDate:now];

    self.lblMinitSetting.text=[NSString stringWithFormat:@"%02d",(60-componentMint.minute)];

}

时间正在更新,一切正常,但不考虑我指出的小时,分​​钟和秒标记。

那是:

    NSString *dateString = @"2015-12-15 15:13:32";
    NSString *dateString = @"2015-12-15";

无论我使用上面两行中的哪一行,剩余时间都是一样的。

此外,我喜欢同时获得小时,分钟和秒。

说下午1点,时间/日期表示当天下午2:30。

我希望小时的输出为1.5小时 我希望分钟的输出为90米 我希望秒的输出为5400秒 等等 不 1小时30分0秒

感谢您的帮助

修改

这里的主要错误是倒计时发生在特定日期并忽略时间。

我希望从现在到未来的某个特定时间倒计时。

3 个答案:

答案 0 :(得分:3)

嘿,我在我的应用程序中完成了这项工作,看看是否有帮助

- (void)updateRemainingTimeFromDateString:(NSString *)strDate
                                forLabel:(UILabel *)label {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *newDate = [dateFormatter dateFromString:strDate];

    NSString *strRemTime = @"";

    int timeInterval = [newDate timeIntervalSinceDate:[NSDate date]];

    if (timeInterval != 0) {
        int noOfDays = timeInterval / (24 * 60 * 60);
        timeInterval = timeInterval % (24 * 60 * 60);
        int noOfHours = timeInterval / (60 * 60);
        timeInterval = timeInterval % (60 * 60);
        int noOfMinutes = timeInterval / 60;
        int noOfSeconds = timeInterval % 60;

        if (noOfDays != 0)
            strRemTime = [NSString stringWithFormat:@"%dD", noOfDays];

        if (strRemTime.length != 0)
            strRemTime = [NSString stringWithFormat:@"%@ %02dH", strRemTime, noOfHours];
        else
            strRemTime = [NSString stringWithFormat:@"%02dH", noOfHours];

        strRemTime = [NSString stringWithFormat:@"%@ %02dM %02dS", strRemTime, noOfMinutes, noOfSeconds];
    }
    [label setText:strRemTime];
}

抱歉,我没有按照你想要的方式对其进行格式化,但仍然不难做到,将日期与当前日期进行比较,标签在此方法中作为参数传递,因此它可以用方法

更新

答案 1 :(得分:0)

-(void)callAfteroneSecond
{
    NSString *strDatehere = [NSString stringWithFormat:@"%@",[Data_Dict objectForKey:@"d_expires"]];
    NSDateFormatter *heredateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [heredateFormatter setDateFormat:@"yyyy-MM-dd"]; // set date formate with your dates

    NSDate *datehere = [heredateFormatter dateFromString: strDatehere];

    NSTimeInterval timeDifference = [datehere timeIntervalSinceDate:[NSDate date]];

    double hours = timeDifference / 3600;
    NSInteger remainder = ((NSInteger)timeDifference)% 3600;
    double minutes = remainder / 60;
    double seconds = remainder % 60;

    _lbl_buyTime.text = [NSString stringWithFormat:@"%.0fh, %.0fm, %.0fs",hours,minutes,seconds];

}

答案 2 :(得分:0)

@channi的答案的迅捷3+版本

random_state