354

基本的にはタイトル通り。に 1 日を追加する方法を考えていNSDateます。

もしそうなら:

21st February 2011

それは次のようになります。

22nd February 2011

または、次の場合:

31st December 2011

それは次のようになります。

1st January 2012.
4

30 に答える 30

280

iOS 8以降、使用できますNSCalendar.dateByAddingUnit

Swift 1.x の例:

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
    .dateByAddingUnit(
         .CalendarUnitDay, 
         value: 1, 
         toDate: today, 
         options: NSCalendarOptions(0)
    )

スウィフト 2.0:

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
    .dateByAddingUnit(
        .Day, 
        value: 1, 
        toDate: today, 
        options: []
    )

スウィフト 3.0:

let today = Date()
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)
于 2014-11-20T20:31:32.787 に答える
117

スイフト5

let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)

Objective-C

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// now build a NSDate object for the next day
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: [NSDate date] options:0];
于 2011-02-21T15:30:48.903 に答える
35

highmaintenance の回答とvikingosegundo のコメントに基づいた実用的なSwift 3+ 実装。この日付拡張機能には、年、月、時刻を変更する追加オプションもあります。

extension Date {

    /// Returns a Date with the specified amount of components added to the one it is called with
    func add(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
        let components = DateComponents(year: years, month: months, day: days, hour: hours, minute: minutes, second: seconds)
        return Calendar.current.date(byAdding: components, to: self)
    }

    /// Returns a Date with the specified amount of components subtracted from the one it is called with
    func subtract(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
        return add(years: -years, months: -months, days: -days, hours: -hours, minutes: -minutes, seconds: -seconds)
    }

}

OPから求められた日のみを追加するための使用法は次のとおりです。

let today = Date() // date is then today for this example
let tomorrow = today.add(days: 1)
于 2016-09-09T09:37:03.007 に答える
15

以下の関数を使用し、days パラメータを使用して日付 daysAhead/daysBehind を取得します。将来の日付には正の値、以前の日付には負の値としてパラメータを渡します。

+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days
{
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.day = days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
                                                     toDate:fromDate
                                                    options:0];
    [dateComponents release];
    return previousDate;
}
于 2013-02-12T09:13:34.860 に答える
12

迅速に

var dayComponenet = NSDateComponents()
dayComponenet.day = 1

var theCalendar = NSCalendar.currentCalendar()
var nextDate = theCalendar.dateByAddingComponents(dayComponenet, toDate: NSDate(), options: nil)
于 2015-01-18T05:02:31.093 に答える
10

できます!

NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay;
NSInteger value = 1;
NSDate *today = [NSDate date];
NSDate *tomorrow = [calendar dateByAddingUnit:unit value:value toDate:today options:NSCalendarMatchStrictly];
于 2016-02-25T15:15:07.683 に答える
10

Swift 3.0 の非常に単純な実装は次のようになります。

func dateByAddingDays(inDays: Int) -> Date {
    let today = Date()
    return Calendar.current.date(byAdding: .day, value: inDays, to: today)!
}
于 2016-10-11T22:14:10.157 に答える
7
NSDate *today=[NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.day=1;
NSDate *targetDate =[calendar dateByAddingComponents:components toDate:today options: 0];
于 2013-03-07T09:00:40.990 に答える
5
NSDateComponents *dayComponent = [[[NSDateComponents alloc] init] autorelease];
dayComponent.day = 1;

NSCalendar *theCalendar = [NSCalendar currentCalendar];
dateToBeIncremented = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeIncremented options:0];

わかりました-これでうまくいくと思いました。ただし、これを使用して 2013 年 3 月 31 日に 1 日を追加すると、23 時間しか追加されていない日付が返されます。実際には 24 があるかもしれませんが、計算に使用すると 23:00 時間しか加算されません。

同様に、2013 年 10 月 28 日にブラスト フォワードすると、コードは 25 時間を加算し、2013-10-28 01:00:00 の日時になります。

1 日を追加するために、私は一番上で次のことを行っていました。

NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];

主に夏時間のため、複雑です。

于 2013-02-12T15:42:02.090 に答える
5

これは、指定された日付に任意のタイプの単位(年/月/日/時間/秒など)を加算/減算できる汎用メソッドです。

スウィフト 2.2 の使用

func addUnitToDate(unitType: NSCalendarUnit, number: Int, date:NSDate) -> NSDate {

    return NSCalendar.currentCalendar().dateByAddingUnit(
        unitType,
        value: number,
        toDate: date,
        options: NSCalendarOptions(rawValue: 0))!

}

print( addUnitToDate(.Day, number: 1, date: NSDate()) ) // Adds 1 Day To Current Date
print( addUnitToDate(.Hour, number: 1, date: NSDate()) ) // Adds 1 Hour To Current Date
print( addUnitToDate(.Minute, number: 1, date: NSDate()) ) // Adds 1 Minute To Current Date

// NOTE: You can use negative values to get backward values too
于 2016-04-18T13:54:35.537 に答える
4

NSDateのメソッド- (id)dateByAddingTimeInterval:(NSTimeInterval)secondsをどこで使用できますseconds60 * 60 * 24 = 86400

于 2011-02-21T15:31:13.723 に答える
3
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *tomorrowDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE, dd MMM yyyy"];
NSLog(@"%@", [dateFormatter stringFromDate:tomorrowDate]);
于 2015-10-30T07:29:52.823 に答える
3

迅速な 2.2 の場合:

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar().dateByAddingUnit(
        .Day,
        value: 1,
        toDate: today,
        options: NSCalendarOptions.MatchStrictly)

これが誰かを助けることを願っています!

于 2016-05-04T01:24:22.217 に答える
2
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
NSLog(@"StartDate = %@", startDate);

components.day += 1;
NSDate *endDate = [calendar dateFromComponents:components];
NSLog(@"EndDate = %@", endDate);
于 2013-11-15T02:52:01.480 に答える
2

私は同じ問題を抱えていました。NSDate の拡張機能を使用します。

- (id)dateByAddingYears:(NSUInteger)years
                 months:(NSUInteger)months
                   days:(NSUInteger)days
                  hours:(NSUInteger)hours
                minutes:(NSUInteger)minutes
                seconds:(NSUInteger)seconds
{
    NSDateComponents * delta = [[[NSDateComponents alloc] init] autorelease];
    NSCalendar * gregorian = [[[NSCalendar alloc]
                               initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease];

    [delta setYear:years];
    [delta setMonth:months];
    [delta setDay:days];
    [delta setHour:hours];
    [delta setMinute:minutes];
    [delta setSecond:seconds];

    return [gregorian dateByAddingComponents:delta toDate:self options:0];
}
于 2015-01-19T22:26:49.907 に答える
2

Swift 4 または Swift 5 では、次のように使用できます。

let date = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: date)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let yesterday_date = dateFormatter.string(from: yesterday!)
print("yesterday->",yesterday_date)

出力:

Current date: 2020-03-02
yesterday date: 2020-03-01
于 2020-03-02T13:20:45.747 に答える
-3

次のコードを使用します。

NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];

として

addTimeInterval

現在は推奨されていません。

于 2012-08-23T09:12:56.003 に答える