131

現在の日付から7日を引くことはできないようです。これは私がやっている方法です:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:-7];
NSDate *sevenDaysAgo = [gregorian dateByAddingComponents:offsetComponents toDate:[NSDate date] options:0];

SevenDaysAgo は、現在の日付と同じ値を取得します。

助けてください。

編集:私のコードでは、現在の日付を取得する変数を正しい日付に置き換えるのを忘れていました。したがって、上記のコードは機能します。

4

12 に答える 12

199

コード:

NSDate *currentDate = [NSDate date];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:-7];
NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:currentDate options:0];
NSLog(@"\ncurrentDate: %@\nseven days ago: %@", currentDate, sevenDaysAgo);
[dateComponents release];

出力:

currentDate: 2012-04-22 12:53:45 +0000
seven days ago: 2012-04-15 12:53:45 +0000

そして、私は JeremyP に完全に同意します。

BR。
ユージーン

于 2012-04-22T12:56:55.423 に答える
115

dateByAddingTimeInterval メソッドを使用します。

NSDate *now = [NSDate date];
NSDate *sevenDaysAgo = [now dateByAddingTimeInterval:-7*24*60*60];
NSLog(@"7 days ago: %@", sevenDaysAgo);

出力:

7 days ago: 2012-04-11 11:35:38 +0000

それが役に立てば幸い

于 2012-04-18T12:36:23.877 に答える
64

スイフト3

Calendar.current.date(byAdding: .day, value: -7, to: Date())
于 2016-09-28T16:23:58.887 に答える
9

Swift 4.2 - 変異 (更新) 自己

元の投稿者が既に日付変数を持っている場合 (更新/変更)、元の投稿者が 1 週間前に取得できる別の方法を次に示します。

extension Date {
    mutating func changeDays(by days: Int) {
        self = Calendar.current.date(byAdding: .day, value: days, to: self)!
    }
}

使用法

var myDate = Date()       // Jan 08, 2019
myDate.changeDays(by: 7)  // Jan 15, 2019
myDate.changeDays(by: 7)  // Jan 22, 2019
myDate.changeDays(by: -1) // Jan 21, 2019

また

// Iterate through one week
for i in 1...7 {
    myDate.changeDays(by: i)
    // Do something
}
于 2019-01-09T05:34:31.143 に答える
5

dymvの答えはうまくいきます。これは迅速に使用できます

extension NSDate {    
    static func changeDaysBy(days : Int) -> NSDate {
        let currentDate = NSDate()
        let dateComponents = NSDateComponents()
        dateComponents.day = days
        return NSCalendar.currentCalendar().dateByAddingComponents(dateComponents, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!
    }
}

これを呼び出すことができます

NSDate.changeDaysBy(-7) // Date week earlier
NSDate.changeDaysBy(14) // Date in next two weeks

それが役立つことを願って、thxからdymvへ

于 2015-09-23T20:13:25.467 に答える
-2

スウィフト 3:

Dovの答えの修正。

extension Date {

    func dateBeforeOrAfterFromToday(numberOfDays :Int?) -> Date {

        let resultDate = Calendar.current.date(byAdding: .day, value: numberOfDays!, to: Date())!
        return resultDate
    }
}

使用法:

let dateBefore =  Date().dateBeforeOrAfterFromToday(numberOfDays : -7)
let dateAfter = Date().dateBeforeOrAfterFromToday(numberOfDays : 7)
print ("dateBefore : \(dateBefore), dateAfter :\(dateAfter)")
于 2017-07-27T09:19:56.920 に答える