Pour utiliser NSDate nous avons besoin de dire de quoi nous parlons... En effet une date n'a de sens que par rapport à un calendrier (Arabe, Hébreux, Japonais, etc...).
Notre calendrier (à nous français) est le calendrier grégorien. Nous avons donc besoin d'une variable NSCalendar initialisée en grégorien.
Ensuite si nous avons besoin de récupérer un élément de la date, nous avons besoin d'une variable NSDateComponent
Le [NSDate new] fournit la date du jour.
Vous devez définir quelles parties de la date vous intéresse, quels composants. Ici, par exemple nous coulons récupérer :
- L'année : NSCalendarUnitYear
- Le mois : NSCalendarUnitMonth
- Le jour dans le mois : NSCalendarUnitDay
Après, nous pouvons récupérer les données dans l'objet composants, par exemple : composants.day, ou composants.weekday. Mais nous pouvons aussi les changer... Ainsi le voici la fonction pour extraire le premier jour du mois :
Mais, aujourd'hui, ce qui m'intéresse c'est d'avoir le mois précédent... Donc :
Ensuite c'est d'avoir la date en chaine de caractères. Là, j'utilise NSDateFormater. Même si nous sommes en grégorien, la date au format texte peut-être en anglais, en français, ou en allemand, etc...
Le preferredLanguage va regarder dans les réglages de l'appareil et mettre "Janvier", "January", "Januar" ou encore "enero" selon la première langue définit dans les réglages de l'appareil. Le "MMMM" veut dire le nom du mois au format long. Regardez la documentation de NSDateFormatter pour voir toutes les possibilités.
Notre calendrier (à nous français) est le calendrier grégorien. Nous avons donc besoin d'une variable NSCalendar initialisée en grégorien.
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
Ensuite si nous avons besoin de récupérer un élément de la date, nous avons besoin d'une variable NSDateComponent
NSDateComponents* components = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate new]];
Vous devez définir quelles parties de la date vous intéresse, quels composants. Ici, par exemple nous coulons récupérer :
- L'année : NSCalendarUnitYear
- Le mois : NSCalendarUnitMonth
- Le jour dans le mois : NSCalendarUnitDay
Après, nous pouvons récupérer les données dans l'objet composants, par exemple : composants.day, ou composants.weekday. Mais nous pouvons aussi les changer... Ainsi le voici la fonction pour extraire le premier jour du mois :
-(NSDate*)firstDayOfCurrentMonth {
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
NSDateComponents* components = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
components.day = 1;
return [calendar dateFromComponents:components];
}
Mais, aujourd'hui, ce qui m'intéresse c'est d'avoir le mois précédent... Donc :
- (NSDate*)previousMonthFrom:(NSDate*)date {
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian];
NSDateComponents* components = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
components.day = 1;
if(components.month==1) {
components.month = 12;
components.year--;
} else {
components.month--;
}
return [calendar dateFromComponents:components];
}
Ensuite c'est d'avoir la date en chaine de caractères. Là, j'utilise NSDateFormater. Même si nous sommes en grégorien, la date au format texte peut-être en anglais, en français, ou en allemand, etc...
-(NSString*)monthYearOfDate:(NSDate*)date {
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] firstObject]];
dateFormatter.dateFormat = @"MMMM yyyy";
return [dateFormatter stringFromDate:date];
}
Le preferredLanguage va regarder dans les réglages de l'appareil et mettre "Janvier", "January", "Januar" ou encore "enero" selon la première langue définit dans les réglages de l'appareil. Le "MMMM" veut dire le nom du mois au format long. Regardez la documentation de NSDateFormatter pour voir toutes les possibilités.
Commentaires