web-dev-qa-db-ja.com

swiftで現在の日付から次の10日間を取得する方法

この「2015-03-09」のようなdateformat文字列があります。現在の日付から次の10日間の日付を取得するにはどうすればよいですか?

14
user3823935

純粋なSwift 3ソリューションの場合:

Calendar.current.date(byAdding: .day, value: 10, to: Date())
23
vtcajones

組み込みの日付変更メソッド.dateByAddingUnitを使用して、今から10日後の日付を取得する方法は次のとおりです。10日(日付)がすべて必要な場合は、「value:10」の部分でループして配列に追加できます。

var tenDaysfromNow: NSDate {
    return NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: 10, toDate: NSDate(), options: [])!
    }

    print(tenDaysfromNow)

そしてSwift3の場合:

var tenDaysfromNow: Date {
   return (Calendar.current as NSCalendar).date(byAdding: .day, value: 10, to: Date(), options: [])!
}
17
thinkswift

これには dateByAddingTimeInterval() メソッドを使用できます。

var dateStr          = "2015-03-09"
var formatter        = NSDateFormatter()
formatter.dateFormat = "YYYY-MM-dd"
var currDate         = formatter.dateFromString(dateStr)

for i in 1...10
{
    var interval = NSTimeInterval(60 * 60 * 24 * i)
    var newDate = currDate?.dateByAddingTimeInterval(interval)
    println(newDate)
}

編集:

コメントで@Martin Rが言及しているように、NSCalendarクラスの dateByAddingComponents() を使用することをお勧めします。

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var dateComponent = NSDateComponents()

for i in 1...10
{
    dateComponent.day = i
    var newDate = calendar?.dateByAddingComponents(dateComponent, toDate: currDate!, options:nil)
    println(newDate)

}
7
Midhun MP

NSDateオブジェクトには、関数 'dateByAddingTimeInterval()'があります。これにより、日付文字列からNSDateを作成できます。次に、10日= 10 * 24 * 60 * 60を追加して、次の10日間のNSDate値を取得します

let today : NSDate = ....
let next10days = today.dateByAddingTimeInterval(10*60*60*24); //interval = seconds
//then you convert back to your date string format if you want, by using NSDateFormatter

夏時間の問題(@MartinR)を回避するには:

let cal = NSCalendar(calendarIdentifier: NSGregorianCalendar)
let next10Days = cal.dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: 10, toDate: today, options: nil)
3
Duyen-Hoa

ここにSwift @MidhunMPによる回答の4/5バージョンがあります

var dateStr          = "2015-03-09"
var formatter        = DateFormatter()
formatter.dateFormat = "YYYY-MM-dd"

var calendar = Calendar(identifier: .gregorian)
var dateComponent = DateComponents()

if let currDate = formatter.date(from: dateStr) {
    for i in 1...10 {
        let newDate = calendar.date(byAdding: .day, value: i, to: currDate)
        print(newDate) 
    }
}
0