2

I want to get a random date of the current month.

Is there any easy way to get the random date of the month?

LittleBobbyTables - Au Revoir
  • 32,008
  • 25
  • 109
  • 114
RAMAN RANA
  • 1,785
  • 4
  • 21
  • 40

2 Answers2

14
NSDate *today = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:today];
NSRange days = [calendar rangeOfUnit:NSDayCalendarUnit 
                       inUnit:NSMonthCalendarUnit 
                      forDate:today];

To generate random number, use

int r = arc4random() % days.length;

and then create a date

[dateComponents setDay:r];
NSDate *startDate = [calendar dateFromComponents:dateComponents];

Hope this helps :)

DivineDesert
  • 6,924
  • 1
  • 29
  • 61
3

Swift version:

let date = Date()
let calendar = Calendar.current
var dateComponents = calendar.dateComponents([.year, .month, .day], from: date)
guard
    let days = calendar.range(of: .day, in: .month, for: date),
    let randomDay = days.randomElement()
else {
        return nil
}
dateComponents.setValue(randomDay, for: .day)
return calendar.date(from: dateComponents)
Noam
  • 620
  • 7
  • 13