โดยทั่วไปตามที่ชื่อกล่าว ฉันสงสัยว่าฉันจะเพิ่ม 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)")
วัตถุประสงค์ C:
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
ตัวอย่างใน Swift 1.x:
let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
.dateByAddingUnit(
.CalendarUnitDay,
value: 1,
toDate: today,
options: NSCalendarOptions(0)
)
Swift 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) } }
การใช้งาน@quemefulDate().adding(.day, 1) // "Jun 6, 2019 at 5:35 PM"
อัปเดตสำหรับ Swift 5
let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)
วัตถุประสงค์ 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];
iOS 8+, OSX 10.9+, Objective-C
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)
}
}
การใช้งานสำหรับเพิ่มเพียงหนึ่งวันตามที่ OP ขอให้เป็น:
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!
Swift 4.0 (เหมือนกับ Swift 3.0 ในคำตอบที่ยอดเยี่ยมนี้ทำให้ชัดเจนสำหรับมือใหม่อย่างฉัน)
let today = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)
ใช้ฟังก์ชั่นด้านล่างและใช้พารามิเตอร์วันเพื่อรับวันที่ 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;
}
อย่างรวดเร็ว
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];
Swift 3.0 ใช้งานง่ายมากจะเป็น:
func dateByAddingDays(inDays: Int) -> Date {
let today = Date()
return Calendar.current.date(byAdding: .day, value: inDays, to: today)!
}
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];
Swift 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
หมายเหตุ: หากคุณไม่ทราบสาเหตุที่บรรทัดของรหัสลงท้ายด้วยเครื่องหมายอัศเจรีย์ค้นหา "Swift Optionals" บน Google
คุณสามารถใช้วิธีการของ NSDate - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds
ที่seconds
จะเป็น60 * 60 * 24 = 86400
ใน Swift 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)
นี่คือวิธีการทั่วไปที่ให้คุณเพิ่ม / ลบประเภทของหน่วย (ปี / เดือน / วัน / ชั่วโมง / วินาที) ในวันที่ที่ระบุ
ใช้Swift 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]);
ใน swift คุณสามารถต่อเติมเพื่อเพิ่มเมธอดใน 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)
อัปเดตสำหรับ Swift 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
สำหรับสวิฟท์ 2.2:
let today = NSDate()
let tomorrow = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 1,
toDate: today,
options: NSCalendarOptions.MatchStrictly)
หวังว่านี่จะช่วยใครซักคน!
Swift 4 หากสิ่งที่คุณต้องการจริงๆคือการเปลี่ยน 24 ชั่วโมง (60 * 60 * 24 วินาที) และไม่ใช่ "1 วันปฏิทิน"
อนาคต:
let dayAhead = Date(timeIntervalSinceNow: TimeInterval(86400.0))
ที่ผ่านมา:
let dayAgo = Date(timeIntervalSinceNow: TimeInterval(-86400.0))
อัพเดตสำหรับ swift 5
let nextDate = fromDate.addingTimeInterval(60*60*24)
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];
}
Swift 2.0
let today = NSDate()
let calendar = NSCalendar.currentCalendar()
let tomorrow = calendar.dateByAddingUnit(.Day, value: 1, toDate: today, options: NSCalendarOptions.MatchFirst)
ใน swift 4 หรือ swift 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> 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 วันใน NSDate ได้อย่างไร
ฟังก์ชันทางคณิตศาสตร์ในการแปลงค่าบวกเป็นลบและลบเป็นบวก
การแปลง NSString เป็น NSDate (และกลับมาอีกครั้ง)
ใช้รหัสต่อไปนี้:
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
เช่น
addTimeInterval
เลิกใช้แล้ว