8
votes

Trouver le nombre total de jours entre deux dates d'iPhone

J'aimerais trouver le nombre total de jours entre deux dates.

E.g. Aujourd'hui, c'est le 01-01-2011 (DD-MM-AAAAYY) et la deuxième date est (25-03-2011), comment puis-je trouver le nombre total de jours? p>

NSDate *currentdate=[NSDate date];
NSLog(@"curretdate is ==%@",currentdate);
NSDateFormatter *tempFormatter1 = [[[NSDateFormatter alloc]init]autorelease];
[tempFormatter1 setDateFormat:@"dd-mm-YYYY hh:mm:ss"];
NSDate *toDate = [tempFormatter1 dateFromString:@"20-04-2011 09:00:00"];

NSLog(@"toDate ==%@",toDate);


9 Réponses :


6
votes
NSCalendar *Calander = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSDateComponents *comps = [[NSDateComponents alloc] init];

[dateFormat setDateFormat:@"dd"];
[comps setDay:[[dateFormat stringFromDate:[NSDate date]] intValue]];
[dateFormat setDateFormat:@"MM"];
[comps setMonth:[[dateFormat stringFromDate:[NSDate date]] intValue]];
[dateFormat setDateFormat:@"yyyy"];
[comps setYear:[[dateFormat stringFromDate:[NSDate date]] intValue]];
[dateFormat setDateFormat:@"HH"];
[comps setHour:05];
[dateFormat setDateFormat:@"mm"];
[comps setMinute:30];

NSDate *currentDate=[Calander dateFromComponents:comps];

NSLog(@"Current Date is :- '%@'",currentDate);


[dateFormat setDateFormat:@"dd"];
[comps setDay:[[dateFormat stringFromDate:yourDate] intValue]];
[dateFormat setDateFormat:@"MM"];
[comps setMonth:[[dateFormat stringFromDate:yourDate] intValue]];
[dateFormat setDateFormat:@"yyyy"];
[comps setYear:[[dateFormat stringFromDate:yourDate] intValue]];
[dateFormat setDateFormat:@"HH"];
[comps setHour:05];
[dateFormat setDateFormat:@"mm"];
[comps setMinute:30];

NSDate *reminderDate=[Calander dateFromComponents:comps];

    //NSLog(@"Current Date is :- '%@'",reminderDate);

    //NSLog(@"Current Date is :- '%@'",currentDate);

    NSTimeInterval ti = [reminderDate timeIntervalSinceDate:currentDate];

    //NSLog(@"Time Interval is :- '%f'",ti);
    int days = ti/86400;

[dateFormat release];
[Calander release];
[comps release];
Hope It will work for you........

1 commentaires

désolé mais je ne peux pas comprendre votre commande et j'ai essayé une autre date et cela me donnera -145 jours de différence que ce n'est pas vrai



-2
votes

S'il vous plaît essayez ceci. J'espère que cela vous aide ...

NSDateFormatter *df=[[NSDateFormatter alloc] init];
// Set the date format according to your needs
[df setDateFormat:@"MM/dd/YYYY hh:mm a"]; //for 12 hour format
//[df setDateFormat:@"MM/dd/YYYY HH:mm "]  // for 24 hour format
NSDate *date1 = [df dateFromString:firstDateString];
NSDate *date2 = [df dateFromString:secondDatestring];
NSLog(@"%@f is the time difference",[date2 timeIntervalSinceDate:date1]);
[df release];


0 commentaires

3
votes

Essayez ceci xxx


3 commentaires

Tout en utilisant du timing précis, je recevais une différence de jour de calendrier de temps. Ceci est la solution correcte! Super!


Merci Nfrik. Pouvez-vous m'aider à autre chose?


Vous devriez probablement indiquer que cela a été copié de la réponse de Joshua Weinberg ici: Stackoverflow.com/a/3142380/19679



10
votes

Dans votre format de date, TOR U définissez le problème, c'est DD-MM-AAAAYY HH: MM: SS. Peut-être que c'était le problème .. u Get Date incorrecte et ne pas obtenir la réponse, j'envoie un code de bit Litte pour obtenir la diffrence de la journée.

xxx


edit 1:

Nous pouvons trouver la différence de date à l'aide de la fonction suivante: XXX

de Abizern`s ANS. Trouver plus d'infromation pour nsdatecomonent < fort> ici.


4 commentaires

Soyez prudent, cela ne prend pas en compte des heures. Par exemple, si la différence est par exemple 1,6 jours, il peut retourner 1 jour au lieu de 2, et cela peut être pire dans le cas particulier, il y a eu un commutateur DST entre les deux dates. Préférez utiliser NsdatEcomponents pour récupérer des composants de date tels que jours, mois, années et ainsi de suite.


Ok mais vous pouvez facilement comprendre cette logique simple. et tout le monde en fait du code après avoir eu une idée


@Ajpatel Comment puis-je obtenir des enregistrements de date.Example: 12-09-2016 00:00:00 Entre 12-09-2016 23:59:59


@Krutarthpatel Utilisez le filtre de prédicat sur votre collection. Comme "@" Datefield>% @ et datefield <=% @ ", startdate, enddate"



5
votes

Un moyen plus simple de le faire est: xxx

et les résultats sont les suivants:

Date de début, 2011-01-01 00:00:00 +0000

Date de fin, 2011-03-25 00:00:00 +0000

83

Essayer d'utiliser et manipuler des secondes pour calculer des différences de temps est une mauvaise idée. Il existe une charge complète de classes et de méthodes fournies par cacao pour des calculs calendriers et vous devez les utiliser autant que possible.


0 commentaires

1
votes

// Essayez-le

if((![txtFromDate.text isEqualToString:@""]) && (![txtToDate.text isEqualToString:@""]))
    {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"MM/dd/yyyy"];
        NSDate *startDate = [formatter dateFromString:txtFromDate.text];
        NSDate *endDate = [formatter dateFromString:txtToDate.text];
        unsigned flags = NSDayCalendarUnit;
        NSDateComponents *difference = [[NSCalendar currentCalendar] components:flags fromDate:startDate toDate:endDate options:0];

        int dayDiff = [difference day];

        lblNoOfDays.text =[NSString stringWithFormat:@"%d",dayDiff];
    }


0 commentaires

1
votes

Pour trouver le nombre de dates entre la date de début de la date de fin.

 NSCalendar *cale=[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    unsigned unitFlags=NSMonthCalendarUnit| NSDayCalendarUnit;
    NSDateComponents *comp1=[cale components:unitFlags fromDate:startDate toDate:endDate options:0];

    NSInteger days=[comp1 day];
    NSLog(@"Days %ld",(long)days);


0 commentaires

1
votes
NSDate *dateA;
NSDate *dateB;

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                           fromDate:dateA
                                             toDate:dateB
                                            options:0];

NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);

0 commentaires

1
votes
//write this code in .h file
{
    NSDate *startDate,*EndDate;
    NSDateFormatter *Date_Formatter;
}
//write this code in .h file`enter code here`
- (void)viewDidLoad
{
    [super viewDidLoad];
    Date_Formatter =[[NSDateFormatter alloc]init];
    [Date_Formatter setDateFormat:@"dd-MM-yyyy"];

    UIToolbar *numbertoolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    numbertoolbar.barStyle = UIBarStyleBlackTranslucent;
    numbertoolbar.items = [NSArray arrayWithObjects:[[UIBarButtonItem alloc]initWithTitle:@"Next"
    style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],nil];
    [numbertoolbar sizeToFit];

    Txt_Start_Date.inputAccessoryView = numbertoolbar;
    [Txt_Start_Date setInputView:Picker_Date];
    Txt_End_Date.inputAccessoryView = numbertoolbar;
    [Txt_End_Date setInputView:Picker_Date];
    [Picker_Date addTarget:self action:@selector(updateTextfield:) forControlEvents:UIControlEventValueChanged];
    // Do any additional setup after loading the view, typically from a nib.
}
-(void)doneWithNumberPad
{

    if ([Txt_Start_Date isFirstResponder])
    {
        [Txt_Start_Date resignFirstResponder];
        [Txt_End_Date becomeFirstResponder];
    }
    else if([Txt_End_Date isFirstResponder])
    {
        [Txt_End_Date resignFirstResponder];

        startDate =[Date_Formatter dateFromString:Txt_Start_Date.text];
        EndDate =[Date_Formatter dateFromString:Txt_End_Date.text];
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSDateComponents *components = [calendar components:NSDayCalendarUnit fromDate:startDate toDate:EndDate options:0];
        Lab_Total_Days.text =[NSString stringWithFormat:@"%ld",components.day];
    }

}

0 commentaires