Посмотрите внимательно на отмеченные строки вашего кода:
let firstDay = calendar.date(from: firstDayComponents)!
var dayToAppend: Date = calendar.date(byAdding: DateComponents(day: 1), to: firstDay)! // <<--!!!
for date in 1...range.count {
datesArray.append(dayToAppend) // <--!!!
dayToAppend = calendar.date(byAdding: DateComponents(day: 1), to: dayToAppend)!
}
Сначала вы получите firstDay
месяца.Затем вы добавляете 1 день (таким образом, dayToAppend
- 2-е число месяца), а затем вы добавляете dayToAppend
к вашему массиву.Итак, ваш массив начинается со второго дня месяца. Не с первым.Таким образом, решение будет таким:
let firstDay = calendar.date(from: firstDayComponents)!
var dayToAppend: Date = firstDay // <-- only line changed
for date in 1...range.count {
datesArray.append(dayToAppend)
dayToAppend = calendar.date(byAdding: DateComponents(day: 1), to: dayToAppend)!
}
Причина, по которой вы думали, что все хорошо: вы, вероятно, не учитываете часовые пояса.Например, когда я распечатываю объект даты на 1 февраля, он выглядит так: 2019-01-31 23:00:00 +0000
.Я живу в GMT + 1.Объект Date сообщает 23:00 по Гринвичу.Это означает, что сейчас 24:00 / 00:00 по Гринвичу + 1.Это на следующий день .
Всегда внимательно читайте напечатанные объекты Date.:)