現在の日付から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は、現在の日付と同じ値を取得します。
助けてください。
編集:私のコードでは、現在の日付を取得する変数を正しい日付に置き換えるのを忘れていました。したがって、上記のコードは機能的です。
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
それが役に立てば幸い
コード:
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。
ユージーン
少なくともiOS 8またはOS X 10.9を実行している場合は、さらにクリーンな方法があります。
NSDate *sevenDaysAgo = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay
value:-7
toDate:[NSDate date]
options:0];
または、Swift 2の場合:
let sevenDaysAgo = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -7,
toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))
Swift 3以上では、さらにコンパクトになります。
let sevenDaysAgo = Calendar.current.date(byAdding: .day, value: -7, to: Date())
Calendar.current.date(byAdding: .day, value: -7, to: Date())
dymvの答えはすばらしい。これはSwiftで使用できます
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
それが助けて、dymvへのthxを願っています
元のポスターが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
}
Swift 4.2iOS 11.x Babec's ソリューション、純粋なSwift
extension Date {
static func changeDaysBy(days : Int) -> Date {
let currentDate = Date()
var dateComponents = DateComponents()
dateComponents.day = days
return Calendar.current.date(byAdding: dateComponents, to: currentDate)!
}
}
元の承認済み回答のSwift 3.0+バージョン
Date()。addingTimeInterval(-7 * 24 * 60 * 60)
ただし、これは絶対値のみを使用します。ほとんどの場合、カレンダーの回答を使用する方が適しています。