How to obtain first Friday from a given QDate?

317 Views Asked by At

Consider a Qdate from

QDate Mydate = ui->dateEdit->date();

For example, suppose we choose 2018/07/14 (today).

How to obtain the day of the first Friday (in this case, 6) on the chosen month (in this case, July)?

I suspect we have to use Mydate.dayOfWeek() computations.

2

There are 2 best solutions below

0
Nick On BEST ANSWER

There is probably a neater solution, but:

  1. Subtract dayOfWeek for current date/day from dayOfMonth.
  2. Add 5 (for Friday).
  3. If -ve add 7 or if +ve answer is modulus 7.

Code:

dayOfWeekToday = MyDate.dayOfWeek()
firstFriday = MyDate.day() - dayOfWeekToday + 5
firstFriday = (firstFriday <= 0) ? firstFriday + 7 : firstFriday % 7
1
user3470494 On

Adding to Nick's answer, there needs to be a special case where result of MyDate.day() - dayOfWeekToday + 5 is divisible by 7. Something like:

dayOfWeekToday = MyDate.dayOfWeek()
firstFriday = MyDate.day() - dayOfWeekToday + 5
firstFriday = (firstFriday <= 0) ? firstFriday + 7 
                                 : (firstFriday % 7 == 0) ? 7 : firstFriday % 7