मूल रूप से, जैसा कि शीर्षक कहता है। मैं सोच रहा हूं कि मैं 1 दिन कैसे जोड़ सकता हूं NSDate
।
तो अगर यह थे:
21st February 2011
यह बन जाएगा:
22nd February 2011
या अगर यह थे:
31st December 2011
यह बन जाएगा:
1st January 2012.
मूल रूप से, जैसा कि शीर्षक कहता है। मैं सोच रहा हूं कि मैं 1 दिन कैसे जोड़ सकता हूं NSDate
।
तो अगर यह थे:
21st February 2011
यह बन जाएगा:
22nd February 2011
या अगर यह थे:
31st December 2011
यह बन जाएगा:
1st January 2012.
जवाबों:
स्विफ्ट 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);
यह आत्म-व्याख्यात्मक होना चाहिए।
dateByAddingComponents
कॉल के अंतिम पैरामीटर को बदलने की जरूरत हैNSCalendarOptions(rawValue: 0)
IOS 8 के बाद से आप उपयोग कर सकते हैं NSCalendar.dateByAddingUnit
स्विफ्ट 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)
date.add(.days, 1)
? * जाता है और
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 के लिए अपडेट किया गया
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];
iOS 8+, OSX 10.9+, ऑब्जेक्टिव-सी
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *tomorrow = [cal dateByAddingUnit:NSCalendarUnitDay
value:1
toDate:[NSDate date]
options:0];
एक काम कर स्विफ्ट 3+ कार्यान्वयन के आधार पर highmaintenance के जवाब और vikingosegundo की टिप्पणी। इस तिथि विस्तार में वर्ष, माह और समय बदलने के अतिरिक्त विकल्प भी हैं:
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)
let foo = Date().add([.calendar: 1, .yearForWeekOfYear: 3]
मैं अपने उत्तर के लिए वैकल्पिक समाधान जोड़ रहा हूं । आपके सुझाव के लिए धन्यवाद, @vikingosegundo!
स्विफ्ट 4.0 (स्विफ्ट 3.0 के रूप में इस अद्भुत जवाब में सिर्फ मेरे जैसे बदमाशों के लिए यह स्पष्ट कर रहा है)
let today = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)
नीचे दिए गए फ़ंक्शन का उपयोग करें और दिनांक दिनों / दिनों को प्राप्त करने के लिए दिनों के पैरामाटर का उपयोग करें। इसके बाद भविष्य की तारीख के लिए सकारात्मक या पिछली तारीखों के लिए नकारात्मक के रूप में पैरामीटर पास करें:
+ (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;
}
स्विफ्ट में
var dayComponenet = NSDateComponents()
dayComponenet.day = 1
var theCalendar = NSCalendar.currentCalendar()
var nextDate = theCalendar.dateByAddingComponents(dayComponenet, toDate: NSDate(), options: nil)
यही काम है!
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];
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];
स्विफ्ट 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
नोट: यदि आपको पता नहीं है कि एक विस्मयादिबोधक बिंदु के साथ कोड की रेखाएं समाप्त क्यों होती हैं, तो Google पर "स्विफ्ट ऑप्शनल" देखें।
आप NSDate की विधि का उपयोग कर सकते हैं - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds
जहां seconds
होगा60 * 60 * 24 = 86400
स्विफ्ट 2.1.1 और xcode 7.1 OSX 10.10.5 में, आप फ़ंक्शन का उपयोग करके किसी भी दिन आगे और पीछे जोड़ सकते हैं
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)
यहां एक सामान्य उद्देश्य विधि है जो आपको निर्दिष्ट तिथि में किसी भी प्रकार की इकाई (वर्ष / महीना / दिन / घंटा / दूसरा आदि) को जोड़ने / घटाने देती है।
स्विफ्ट का उपयोग करना 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
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 घंटे जोड़ा गया है।
इसी तरह, यदि आप 28 अक्टूबर 2013 को आगे बढ़ते हैं, तो कोड 25 घंटे जोड़ता है जिसके परिणामस्वरूप 2013-10-28 01:00:00 की तारीख का समय होता है।
एक दिन जोड़ने के लिए मैं शीर्ष पर बात कर रहा था:
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
जटिल, मुख्यतः दिन के उजाले की बचत के कारण।
60*60*24 + 1
में लीप सेकंड के कारण इसकी लंबाई होती है । तारीखों को इस सब को कवर करना चाहिए, और यही कारण है कि कोको की तारीख से निपटने वास्तव में बहुत अच्छा है!
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]);
स्विफ्ट में आप NSDate में विधि जोड़ने के लिए एक्सटेंशन बना सकते हैं
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)
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);
मुझे भी यही समस्या थी; 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];
}
स्विफ्ट 2.0
let today = NSDate()
let calendar = NSCalendar.currentCalendar()
let tomorrow = calendar.dateByAddingUnit(.Day, value: 1, toDate: today, options: NSCalendarOptions.MatchFirst)
स्विफ्ट 4 या स्विफ्ट 5 में, आप bellow की तरह उपयोग कर सकते हैं:
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
स्ट्रिंग एक्सटेंशन: स्ट्रिंग String_Date> दिनांक परिवर्तित करें
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 दिन कैसे जोड़ सकता हूं?
गणित का कार्य सकारात्मक int को ऋणात्मक और ऋणात्मक को धनात्मक में परिवर्तित करना है?
NSString को NSDate में परिवर्तित करना (और फिर से वापस)
निम्नलिखित कोड का उपयोग करें:
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
जैसा
addTimeInterval
अब पदावनत हो गया है।