Как получить предыдущий и следующий месяц в календаре-Swift
16414 просмотра
4 ответа
Я пытаюсь получить предыдущий и следующий месяц, нажав на кнопку, но это изменило мой год, а не месяц.
Я пытаюсь использовать эту ссылку, но она есть в Objective-C.
func firstDateOfMonth(){
let components = calendar.components([.Year, .Month], fromDate: date)
let startOfMonth = calendar.dateFromComponents(components)!
print(dateFormatatter.stringFromDate(startOfMonth)) // 2015-11-01
}
func lastDateOfMonth(){
let components = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date)
let month = components.month
let year = components.year
let startOfMonth1 = ("01-\(month)-\(year)")
var startOfMonth : NSDate?
var lengthOfMonth : NSTimeInterval = 0
calendar.rangeOfUnit(.Month, startDate: &startOfMonth, interval: &lengthOfMonth, forDate: date)
let endOfMonth = startOfMonth!.dateByAddingTimeInterval(lengthOfMonth - 1)
print(dateFormatatter.stringFromDate(endOfMonth))
}
func monthCalculation(){
firstDateOfMonth()
lastDateOfMonth()
}
@IBAction func previousMonthBtnAction(sender: AnyObject) {
let componen = calendar.components([.Day , .Month , .Year], fromDate: date)
componen.month = -1
self.date = calendar.dateFromComponents(componen)!
print(self.date)
}
@IBAction func nextMonthBtnAction(sender: AnyObject) {
}
Так как же сделать это за предыдущий и следующий месяц?
Автор: iDeveloper Источник Размещён: 13.11.2019 11:35Ответы (4)
40 плюса
Попробуй вот так.
Чтобы получить дату следующего месяца.
Свифт 3 и Свифт 4
let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: Date())
Swift 2.3 или ниже
let nextMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: NSDate(), options: [])
Чтобы получить дату предыдущего месяца.
Свифт 3
let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: Date())
Swift 2.3 или ниже
let previousMonth = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: NSDate(), options: [])
Примечание. Чтобы получить дату следующего и предыдущего месяца, я использовал текущую дату, вы можете использовать дату, с которой вы хотите указать дату следующего и предыдущего месяца, просто измените ее NSDate()
с вашим NSDate
объектом.
Редактировать: Для продолжения путешествий следующих и предыдущих месяцев вам необходимо сохранить один объект даты currentDate, а при попытке получить следующий и предыдущий месяц использовать этот объект даты и обновить его.
На следующий месяц
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])
За предыдущий месяц.
let currentDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: currentDate, options: [])
Вы также можете использовать расширение, которое облегчит задачу.
Свифт 3
extension Date {
func getNextMonth() -> Date? {
return Calendar.current.date(byAdding: .month, value: 1, to: self)
}
func getPreviousMonth() -> Date? {
return Calendar.current.date(byAdding: .month, value: -1, to: self)
}
}
Swift 2.3 или ниже
extension NSDate {
func getNextMonth() -> NSDate?{
return NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: self, options: [])
}
func getPreviousMonth() -> NSDate?{
return NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: -1, toDate: self, options: [])
}
}
Теперь просто получить дату от currentDate.
currentDate = currentDate.getNextMonth()
currentDate = currentDate.getPreviousMonth()
Автор: Nirav D
Размещён: 01.10.2016 08:58
2 плюса
var currentDate = NSDate()
func nextMonth() -> NSDate {
let nextDate = NSCalendar.currentCalendar().dateByAddingUnit(.Month, value: 1, toDate: currentDate, options: [])!
currentDate = nextDate
return nextDate
}
print(nextMonth()) // 2016-11-01 20:11:15 +0000
print(nextMonth()) // 2016-12-01 21:11:15 +0000
print(nextMonth()) // 2017-01-01 21:11:15 +0000
Автор: Tikhonov Alexander
Размещён: 01.10.2016 09:10
0 плюса
Я бы порекомендовал использовать библиотеку SwiftDate :
let date = Date()
let nextMonthDate = date.nextMonth(at: .auto)
let prevMonthDate = date.prevMonth(at: .auto)
Вы можете использовать .start
и .end
вместо .auto
. Посмотрите на информацию о, nextMonth
например:
когда
.auto
вычисляется дата, добавляется один месяц к текущей дате.Если вы передаете
.start
результат даты, это первый день следующего месяца (в 00:00:00).Если вы передаете
.end
результат, дата является последним днем следующего месяца (в 23:59:59).
Библиотека также содержит prevWeek
/ nextWeek
и многие другие полезные методы.
0 плюса
Swift 5
let date = Date()
let calendar = Calendar.current
let currentYear = Calendar.current.component(.year, from: Date())
let previousYear = currentYear + 1
let nextYear = currentYear + 1
print("\(previousYear)->\(currentYear)->\(nextYear)")
Output:
2018->2019->2020
Удачного кодирования :)
Автор: Ariven Nadar Размещён: 08.11.2019 09:05Вопросы из категории :
- ios Приложение для iPhone в ландшафтном режиме, системы 2008
- ios Как мне дать моим веб-сайтам значок для iPhone?
- ios Как программно отправить смс на айфон?
- ios Как я могу разработать для iPhone, используя машину для разработки Windows?
- ios Tips for a successful AppStore submission?
- swift Как я могу программным образом определить, работает ли мое приложение в симуляторе iphone?
- swift iOS: Convert UTC NSDate to local Timezone
- swift Как установить цель и действие для UIBarButtonItem во время выполнения
- swift Жирный и не жирный текст в одном UILabel?
- swift Найти касательную точки на кубической кривой безье
- swift3 Программно создать NSWindow
- swift3 Извлечение значений RGB из UIColor
- swift3 Как ввести формат валюты в текстовое поле (справа налево) с помощью Swift?
- swift3 Определить размер UILabel на основе строки в Swift
- swift3 печать без новой строки в Swift
- calendar Получить последнюю пятницу месяца в Java
- calendar .NET: Get all Outlook calendar items
- calendar Как вычесть X дней из даты, используя календарь Java?
- calendar Как правильно проверить дату в Java
- calendar Почему январь месяц 0 в календаре Java?