Desidero ottenere la data del prossimo lunedì successivo alla data corrente.Trova l'NSDate per il prossimo lunedì
Quindi se la data odierna è il 2013-08-09 (venerdì), desidero ottenere la data 2013-08-12.
Come posso fare questo?
Desidero ottenere la data del prossimo lunedì successivo alla data corrente.Trova l'NSDate per il prossimo lunedì
Quindi se la data odierna è il 2013-08-09 (venerdì), desidero ottenere la data 2013-08-12.
Come posso fare questo?
Questo pezzo di codice dovrebbe ottenere quello che vuoi. Calcola semplicemente quanti giorni sono da lunedì e lo aggiungono dalla data corrente.
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now];
NSUInteger weekdayToday = [components weekday];
NSInteger daysToMonday = (9 - weekdayToday) % 7;
NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday];
testato, ma dovrebbe funzionare, e senza preoccuparsi di cambiare le date del primo calendario.
E può anche essere facilmente addapted ad ogni altro giorno della settimana, basta cambiare il 9
all'interno (9 - weekdayToday) % 7;
da 7 + weekDayYouWant
, ricordando che domenica = 1, lunedi = 2 ...
Grazie Lucas, funziona perfettamente. Solo una cosa, se oggi è lunedì, voglio mostrare il lunedì successivo invece di questo lunedì. Puoi dirmi come posso ottenere questo? Grazie ancora – iOSAppDev
Non penso che ci sia un modo elegante per cambiare il comportamento per un solo giorno del genere. Ma puoi ** aggiungere ** (non sostituire) qualcosa del genere, ** prima ** il codice '' 'nextMonday'':' '' daysToMonday = (daysToMonday == 0)? 7: daysToMonday; '' '. In questo modo, aggiungerei 7 giorni invece di 0 giorni quando il giorno corrente è lunedì. Se trovi una soluzione migliore per questo caso, fammelo sapere –
Grazie per la risposta rapida e la tua soluzione ha funzionato perfettamente :) Grazie – iOSAppDev
È possibile utilizzare il metodo NSCalendar
dateFromComponents:
passando un correttamente avviato NSDateComponents
oggetto
NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeekOfYear:[components weekOfYear] + 1];
[comps setWeekday:1];
[comps setYear:[components year]];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday?
NSDate *date = [calendar dateFromComponents:comps];
Qualcosa in questo senso potrebbe funzionare (ciecamente digitato)
supponendo che la settimana inizi di domenica (giorno della settimana = 0), questo codice non otterrebbe il lunedì della settimana dopo invece del solo giorno successivo quando è in funzione la domenica? –
Le unità giorno della settimana sono i numeri da 1 a n, dove n è il numero di giorni della settimana. Ad esempio, nel calendario gregoriano, n è 7 e la domenica è rappresentata da 1. Quindi sì, probabilmente il codice deve essere modificato – Vik
Ho leggermente modificato il codice per tenerne conto. Ovviamente si dovrebbe anche verificare che il giorno corrente non sia l'ultima settimana dell'anno e così via .. – Vik
Anche se questo è una domanda semplice e richiede poco sforzo, le date sono fastidiose come l'inferno in qualsiasi lingua, quindi non vedo perché dovresti essere sottovalutato. –