Intereting Posts
IAP Восстановление неиспользуемого элемента с ненужными транзакциями обновления и странной транзакцией UIImagePickerController не работает iOS 9.3 ios создает программный запрос сертификата Преобразование массива пути изображения в кодировку base64.? Установить Navbar hidden = false не работает iOS: количество объектов (0) отличается от количества ключей NSTimer не останавливается после того, как приложение переходит в фоновый режим Пользовательский UICollectionViewLayout Различные размеры ячеек Произвольное смешивание полупрозрачного PNG, сохраняющего альфа на iOS Какие свойства мы синтезируем в xcode 4.4.1 iTunes Connect – отклонено из-за метода «setUrlRequest» Facebook Apple возобновляемых закупок PayPal-iOS-SDK с использованием cocoapods выдает ошибку в заголовке моста В чем разница между классом Root и базовым классом в Objective-C? высота для строки при индексировании IndexPath Ошибка EXC Bad Access

в тот же день прошлого месяца ios

Есть ли способ использования NSCalender, который вы можете получить в тот же день прошлого месяца?

Я использую календарь, который показывает пользователю 1 месяц, как календарь карандаша iPad, когда они нажимают кнопку, которую я хочу переместить в предыдущий месяц, но должны выбрать тот же день, что и раньше.

Я хочу просто сделать

[components setMonth:([components month] - 1)]; 

но это создаст проблемы, когда я перехожу из месяца с 31 день в месяц с 30 днями, а выбранный день – 31-й.

Я смог найти примеры для Android, но не iOS.

пример андроида

Любая помощь будет оценена

Проверьте эту ссылку .

Речь идет о добавлении одного месяца, но вы, вероятно, могли бы сделать то же самое с вычитанием.

+ Изменить

 [dateComponents setMonth:1]; 

в

 [dateComponents setMonth:-1]; 

Кажется, нет очевидного «правильного» ответа и никакого «встроенного» ответа.

Поскольку «простая» идея Криса может привести к недействительным датам, вам, возможно, придется обращаться с краями.

Псевдокод для работы с день-месяц-год:

  1. если месяц = ​​декабрь начинается с дня-1 (год-1), иначе день- (месяц-1) -лет [с использованием dateComponents]
  2. проверьте, действительно ли это действительная дата (используя NSDateFormatter, как в этом вопросе
  3. повторите вычитание в один день, пока не достигнете действительной даты

Другая идея:

 prevMonthDate = startDate; Repeat prevMonthDate = prevMonthDate - 1 day Until (Month(prevMonthDate) < Month(startDate) Or Year(prevMonthDate) < Year(startDate)) And (Day(prevMonthDate) <= Day(startDate)) 

Для этого требуется работа с NSDate и NSDateComponents, ознакомьтесь с руководством по программированию даты и времени .