আমি কীভাবে একটি এনএসডিটে 1 দিন যুক্ত করব?


320

মূলত, শিরোনাম হিসাবে। আমি ভাবছি যে আমি কীভাবে 1 দিন যোগ করতে পারি NSDate

সুতরাং যদি এটি ছিল:

21st February 2011

এটি হয়ে যাবে:

22nd February 2011

বা যদি এটি ছিল:

31st December 2011

এটি হয়ে যাবে:

1st January 2012.

4
নোট করুন যে কোনও এনএসডিট কোনও তারিখের প্রতিনিধিত্ব করে না, এটি সময়ে একটি পয়েন্ট উপস্থাপন করে। সুতরাং এটি একটি সময় পাশাপাশি একটি তারিখ অন্তর্ভুক্ত।
রোগ

4
সম্মত - আপনার নীচে জ্যাক জার্মানির উত্তরটি ব্যবহার করা উচিত। অ্যাপলের তারিখ এবং সময় প্রোগ্রামিং গাইড দেখুন
অ্যাশ ফুরো

আরও নতুন (এবং সংক্ষিপ্ত) সমাধানের জন্য নীচে স্ক্রোল করুন!
6:59 এ ক্যাটানোরে

উত্তর:


711

সুইফ্ট 5.0:

var dayComponent    = DateComponents()
dayComponent.day    = 1 // For removing one day (yesterday): -1
let theCalendar     = Calendar.current
let nextDate        = theCalendar.date(byAdding: dayComponent, to: Date())
print("nextDate : \(nextDate)")

উদ্দেশ্য গ :

NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;

NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];

NSLog(@"nextDate: %@ ...", nextDate);

এটি স্ব-ব্যাখ্যামূলক হওয়া উচিত।


19
আপনি একটি তারিখ থেকে বিয়োগ করতে নেতিবাচক উপাদানগুলিও ব্যবহার করতে পারেন।
ডেটাগ্রাহাম

58
নির্বাচিত উত্তরের চেয়ে অনেক বেশি ভাল সমাধান
জাস্টিন মাইনার্স

19
এক দিনের মূল্য সেকেন্ডের চেয়ে ডেট উপাদানগুলি ব্যবহারের জন্য +1।
অ্যাবিজার্ন

হ্যাঁ দিবালোক সংরক্ষণের জন্য ভাল কাজ করে। ডিএসটি চেক করার পরামর্শ: আপনার ম্যাকের তারিখ এবং সময় পুনরায় সেট করুন এবং তারপরে আপনার সিমুলেটরটি পুনরায় চালু করুন, এটি আপনার সিস্টেমের সময় অনুসরণ করবে।
রব ভ্যান ডেন বার্গ

2
dateByAddingComponents NSCalendarOptions(rawValue: 0)
সুইফটে

270

আইওএস 8 যেহেতু আপনি ব্যবহার করতে পারেন NSCalendar.dateByAddingUnit

সুইফট 1.x উদাহরণ:

let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
    .dateByAddingUnit(
         .CalendarUnitDay, 
         value: 1, 
         toDate: today, 
         options: NSCalendarOptions(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)

5
এটি কি আমিই, না সুইফটের মতো কিছু তৈরি করা এত সহজ হবে না date.add(.days, 1)? * গিয়ে একটি এক্সটেনশান তৈরি করে
মুহুর্তে

2
@ স্মরণীয় extension Date { func adding(_ component: Calendar.Component, _ value: Int) -> Date? { return Calendar.current.date(byAdding: component, value: value, to: self) } }ব্যবহারDate().adding(.day, 1) // "Jun 6, 2019 at 5:35 PM"
লিও ডাবাস 5'19

82

সুইফট 5-এর জন্য আপডেট হয়েছে

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

উদ্দেশ্য গ

 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];

34

আইওএস 8+, ওএসএক্স 10.9+, উদ্দেশ্য-সি

NSCalendar *cal = [NSCalendar currentCalendar];    
NSDate *tomorrow = [cal dateByAddingUnit:NSCalendarUnitDay 
                                   value:1 
                                  toDate:[NSDate date] 
                                 options:0];

মনে রাখবেন আপনি এখানে ইউনিটটি মাস্ক করতে পারবেন না (কেবলমাত্র একটি ব্যবহার করুন)।
6:58 এ ক্যাটানোরে

31

হাইমেনটেনেন্সের উত্তর এবং ভাইকিংগুন্ডোর মন্তব্যের ভিত্তিতে একটি কার্যকারী সুইফ্ট 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)
    }

}

ওপির অনুরোধ অনুযায়ী কেবলমাত্র একটি দিন যুক্ত করার জন্য ব্যবহারগুলি হ'ল:

let today = Date() // date is then today for this example
let tomorrow = today.add(days: 1)

2
আপনি তারিখের উপাদানগুলি ব্যবহার করে কোডটি ব্যাপকভাবে সংক্ষিপ্ত করতে পারেন।
ভাইকিংগুন্ডো

আপনি ঠিক বলেছেন, যদিও আমার মতে এটি ডাউনসাইডস রয়েছে: - এক্সটেনশনটি ব্যবহার করে কোডটি পরিষ্কার দেখায় না - এটি উপাদানগুলির সাথে কিছু অপ্রয়োজনীয় বিকল্পগুলি খোলে যা let foo = Date().add([.calendar: 1, .yearForWeekOfYear: 3] আমি আমার উত্তরের বিকল্প সমাধান যোগ করার মতো কিছুটা বোধগম্য করি না যদিও । আপনার পরামর্শের জন্য ধন্যবাদ, @ ভাইকিংগুন্ডো!
বেনো ক্রেস

3
ভাল, আমি আসলে কিছু আলাদা বোঝাতে চাইছিলাম
ভাইকিংগুন্ডো

ওহ, এটি আসলে আরও ভাল, ধন্যবাদ!
বেনো ক্রেস

22

সুইফট ৪.০ ( এই চমত্কার উত্তরে সুইফট as.০ এর মতোই এটি আমার মতো দুষ্টুদের জন্য পরিষ্কার করে দিয়েছে)

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

3
আপনি কি আপনার পরিবর্তনশীল নামটি পরিবর্তন করতে ভুলে গেছেন?
রাকশা শাস্ত্রী

13

নীচের ফাংশনটি ব্যবহার করুন এবং তারিখের দিনগুলি পেতে দিন প্যারামিটার ব্যবহার করুনআপনার / দিনগুলি কেবলমাত্র ভবিষ্যতের তারিখের জন্য ইতিবাচক হিসাবে বা পূর্ববর্তী তারিখের জন্য নেতিবাচক হিসাবে প্যারামিটারটি পাস করুন:

+ (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;
}

10

দ্রুত

var dayComponenet = NSDateComponents()
dayComponenet.day = 1

var theCalendar = NSCalendar.currentCalendar()
var nextDate = theCalendar.dateByAddingComponents(dayComponenet, toDate: NSDate(), options: nil)

8

এটা কাজ!

    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];

ভাল আপাতদৃষ্টিতে এই প্রশ্নটি কোড ডাম্প স্বর্গ। সুতরাং আপনাকে একা করার কোনও কারণ নেই।
25-18

2
আমার উত্তরটি আরও সঠিক কারণ আপনি যদি এনএসসিএলগ্র্যান্ডর্যাপকম্পোনগুলি (0) বিকল্পটি ব্যবহার করেন তবে আপনি কেবল চলতি মাসের সীমার মধ্যে তারিখ তৈরি করতে পারেন। এর অর্থ হ'ল আপনি যদি 31 শে জানুয়ারী, এনএসসিএলগ্র্যান্ডওয়্যার্প কম্পোনেন্টগুলির সাথে 1 দিন যোগ করেন তবে আপনি জানুয়ারী, 1 2016 পাবেন N এনএসসিএলগ্র্যান্ডম্যাচ স্ট্রিটলি বিকল্পের সাহায্যে আপনি পরবর্তী ক্যালেন্ডারের তারিখ পাবেন।
ডেনজুকভ

8

সুইফট 3.0 খুব সাধারণ বাস্তবায়ন হবে:

func dateByAddingDays(inDays: Int) -> Date {
    let today = Date()
    return Calendar.current.date(byAdding: .day, value: inDays, to: today)!
}

5
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];

5

সুইফট 4.0

extension Date {
    func add(_ unit: Calendar.Component, value: Int) -> Date? {
        return Calendar.current.date(byAdding: unit, value: value, to: self)
    }
}

ব্যবহার

date.add(.day, 3)!   // adds 3 days
date.add(.day, -14)!   // subtracts 14 days

দ্রষ্টব্য: আপনি যদি জানেন না কেন কোডের লাইনগুলি একটি উদ্দীপনা পয়েন্ট দিয়ে শেষ হয়, গুগলে "সুইফ্ট বিকল্পগুলি" সন্ধান করুন।


3

আপনি NSDate এর পদ্ধতিটি ব্যবহার করতে পারেন - (id)dateByAddingTimeInterval:(NSTimeInterval)secondsযেখানে secondsহবে60 * 60 * 24 = 86400


3
এনএসডেটের অ্যাডবাইটাইমআইন্টারওয়াল আইওএস 4 ( বিট.লি / ভিটিওজভিউ ) এ অবহেলা করা হয়েছিল । পরিবর্তে তারিখবাইএডিংটাইমআইন্টারভালভ (বিট.লি / ভিআরকিএফআরএন ) ব্যবহার করুন।
বিলমায়া

4
দিনের আলোর সাশ্রয়ের সময়গুলির কারণে দিনগুলিতে 23, 24 বা 25 ঘন্টা থাকতে পারে।
ভাইকিংগুন্ডো

3

সুইফট ২.১.১ এবং এক্সকোড .1.১ ওএসএক্স ১০.১০.৫ এ, আপনি ফাংশনটি ব্যবহার করে যে কোনও দিন এগিয়ে এবং পিছনে যুক্ত করতে পারেন

func addDaystoGivenDate(baseDate:NSDate,NumberOfDaysToAdd:Int)->NSDate
{
    let dateComponents = NSDateComponents()
    let CurrentCalendar = NSCalendar.currentCalendar()
    let CalendarOption = NSCalendarOptions()

    dateComponents.day = NumberOfDaysToAdd

    let newDate = CurrentCalendar.dateByAddingComponents(dateComponents, toDate: baseDate, options: CalendarOption)
    return newDate!
}

বর্তমান তারিখটি 9 দিনের বাড়ানোর জন্য ফাংশন কল

var newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: 9)
print(newDate)

80 দিনের মধ্যে হ্রাস বর্তমান তারিখের জন্য ফাংশন কল

newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80)
 print(newDate)

3

এখানে একটি সাধারণ উদ্দেশ্য পদ্ধতি যা আপনাকে নির্দিষ্ট তারিখে যেকোন প্রকার ইউনিট (বছর / মাস / দিন / ঘন্টা / দ্বিতীয় ইত্যাদি) যোগ / বিয়োগ করতে দেয়।

সুইফট ২.২ ব্যবহার করে

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

3
NSDateComponents *dayComponent = [[[NSDateComponents alloc] init] autorelease];
dayComponent.day = 1;

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

ঠিক আছে - আমি ভেবেছিলাম এটি আমার জন্য কাজ করবে। তবে, আপনি যদি 31 শে মার্চ 2013 এ কোনও দিন যোগ করতে এটি ব্যবহার করেন তবে এটি এমন একটি তারিখ ফেরত দেবে যা এতে কেবল 23 ঘন্টা যুক্ত হয়েছে। এটিতে আসলে 24 টি থাকতে পারে তবে গণনাগুলিতে ব্যবহার করতে কেবল 23:00 ঘন্টা যুক্ত হয়েছে।

একইভাবে, আপনি যদি ২৮ শে অক্টোবর ২০১৩-তে এগিয়ে যান তবে কোডটি ২৩ ঘণ্টা যুক্ত করে 2013-10-28 01:00:00 তারিখের সময়।

কোনও দিন যুক্ত করার জন্য আমি জিনিসটি শীর্ষে করছি, যুক্ত করে:

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

জটিল, মূলত দিবালোক সংরক্ষণের কারণে।


বছরে একবার দিনে মাত্র ২৩ ঘন্টা থাকে। একবার 25. এবং প্রতি কয়েক বছর এটির 60*60*24 + 1লিপ সেকেন্ডের কারণে দৈর্ঘ্য রয়েছে । খেজুর অবশ্যই এই সমস্তগুলি কভার করবে এবং এজন্যই কোকোয় তারিখের হ্যান্ডলিংটি দুর্দান্ত!
ভাইকিংগুন্ডো

2
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]);

2

দ্রুত আপনি এনএসডিটে পদ্ধতি যুক্ত করতে এক্সটেনশন করতে পারেন

extension NSDate {
    func addNoOfDays(noOfDays:Int) -> NSDate! {
        let cal:NSCalendar = NSCalendar.currentCalendar()
        cal.timeZone = NSTimeZone(abbreviation: "UTC")!
        let comps:NSDateComponents = NSDateComponents()
        comps.day = noOfDays
        return cal.dateByAddingComponents(comps, toDate: self, options: nil)
    }
}

আপনি এটি হিসাবে ব্যবহার করতে পারেন

NSDate().addNoOfDays(3)

2

সুইফট 4 এর জন্য আপডেট:

let now = Date() // the current date/time
let oneDayFromNow = Calendar.current.date(byAdding: .day, value: 1, to: now) // Tomorrow with same time of day as now

1

দ্রুত 2.2 এর জন্য:

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

আশা করি এটি কাউকে সাহায্য করবে!


1

সুইফট 4, আপনার যা যা প্রয়োজন তা হ'ল 24 ঘন্টা শিফট (60 * 60 * 24 সেকেন্ড) এবং "1 ক্যালেন্ডার দিন" নয়

ভবিষ্যত: let dayAhead = Date(timeIntervalSinceNow: TimeInterval(86400.0))

অতীত: let dayAgo = Date(timeIntervalSinceNow: TimeInterval(-86400.0))



0
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);

0

আমারও একই সমস্যা ছিল; এনএসডেটের জন্য একটি এক্সটেনশন ব্যবহার করুন:

- (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];
}


0

সুইফ্ট 4 বা সুইফ্ট 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

0

স্ট্রিং এক্সটেনশন: স্ট্রিং_ তারিখ> তারিখ রূপান্তর করুন

extension String{
  func DateConvert(oldFormat:String)->Date{ // format example: yyyy-MM-dd HH:mm:ss 
    let isoDate = self
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
    dateFormatter.dateFormat = oldFormat
    return dateFormatter.date(from:isoDate)!
  }
}

তারিখ এক্সটেনশন: রূপান্তর তারিখ> স্ট্রিং

extension Date{
 func DateConvert(_ newFormat:String)-> String{
    let formatter = DateFormatter()
    formatter.dateFormat = newFormat
    return formatter.string(from: self)
 }
}

তারিখ এক্সটেনশন: +/- তারিখ পান

extension String{
  func next(day:Int)->Date{
    var dayComponent    = DateComponents()
    dayComponent.day    = day
    let theCalendar     = Calendar.current
    let nextDate        = theCalendar.date(byAdding: dayComponent, to: Date())
    return nextDate!
  }

 func past(day:Int)->Date{
    var pastCount = day
    if(pastCount>0){
        pastCount = day * -1
    }
    var dayComponent    = DateComponents()
    dayComponent.day    = pastCount
    let theCalendar     = Calendar.current
    let nextDate        = theCalendar.date(byAdding: dayComponent, to: Date())
    return nextDate!
 }
}

ব্যবহার:

let today = Date()
let todayString = "2020-02-02 23:00:00"
let newDate = today.DateConvert("yyyy-MM-dd HH:mm:ss") //2020-02-02 23:00:00
let newToday = todayString.DateConvert(oldFormat: "yyyy-MM-dd HH:mm:ss")//2020-02-02
let newDatePlus = today.next(day: 1)//2020-02-03 23:00:00
let newDateMinus = today.past(day: 1)//2020-02-01 23:00:00

রেফারেন্স: একাধিক প্রশ্ন থেকে
আমি কীভাবে একটি এনএসডিটে 1 দিন যুক্ত করব?
গণিতের ক্রিয়াটি ইতিবাচক ইনটাকে নেতিবাচক এবং নেতিবাচককে ধনাত্মক রূপান্তর করতে?
এনএসএসটিংকে এনএসডিটে রূপান্তর করা (এবং আবার ফিরে)


-1

নিম্নলিখিত কোড ব্যবহার করুন:

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

যেমন

addTimeInterval

এখন অবচয় করা হয়েছে।


3
দিনের
আলোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.