Objective c 从当前日期减去7天
似乎我不能从当前日期减去7天。我就是这样做的:Objective c 从当前日期减去7天,objective-c,ios,nsdate,Objective C,Ios,Nsdate,似乎我不能从当前日期减去7天。我就是这样做的: NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; [offsetComponents setDay:-7]; NSDate *sevenDaysAgo = [gregorian
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
希望有帮助代码:输出:
我完全同意杰里米普的观点 BR.
Eugene如果您至少运行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())
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有所帮助
适用于SWIFT 3.0
这是功能,你可以减少天,月,日的任何计数
比如这里,我把当前系统日期的年份减少了100年,你也可以把它改为天,月
把柜台摆好
并将其存储在一个数组中,您可以在任何地方使用该数组
func currentTime()
Swift 3:
对Dov答案的修改
extension Date {
func dateBeforeOrAfterFromToday(numberOfDays :Int?) -> Date {
let resultDate = Calendar.current.date(byAdding: .day, value: numberOfDays!, to: Date())!
return resultDate
}
}
用法:
let dateBefore = Date().dateBeforeOrAfterFromToday(numberOfDays : -7)
let dateAfter = Date().dateBeforeOrAfterFromToday(numberOfDays : 7)
print ("dateBefore : \(dateBefore), dateAfter :\(dateAfter)")
原始接受答案的Swift 3.0+版本 日期()。添加时间间隔(-7*24*60*60)
但是,这仅使用绝对值。在大多数情况下,使用日历答案可能更合适。Swift 4.2iOS 11.x解决方案,纯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 4.2-自我变异(更新)
如果原始海报已经有了日期变量(更新/变异本身),那么一周前可以获得另一种方式
用法
或
Swift操作员分机:
延期日期{
静态函数-(左:日期,右:整数)->日期{
返回Calendar.current.date(通过添加:.day,值:-rhs,to:lhs)!
}
}
用法
let today=Date()
让昨天=今天-7
[NSDate date WITH TIMEINTERVALICENCERFERENCEDATE:[NSDate date]。TIMEINTERVALICENCERFERENCEDATE-(7*24*60*60)]
--尽管它不处理DST更改。这应该可以工作。如果你加1而不是减7行吗?您如何确定sevenDaysAgo指的是今天?有些情况下,这无法正常工作,例如,如果夏令时在所讨论的七天内发生变化。dymv的答案是这样做的更安全的方法。出于上述原因,这是错误的答案,请使用dymv的答案。实际上,这可以通过:[现在dateByAddingDays:-7]
进行这种计算是危险的,更喜欢@Dov的版本。但这个答案中存在内存泄漏。不要使用NSCalendar,而是使用Calendar:)这应该是公认的答案,因为它可以为您处理所有边缘情况。@ZhivkoBogdanov我的答案是在公认的答案之后几年的,我不相信您可以更改ac事后接受答案。这比其他任何东西都更便于将来参考。为什么numberOfDays
是可选的,然后强制展开?它不应该只是一个非可选的Int
?它是在swift函数中包含可选值的正确方法。但是为什么numberOfDays是可选的?有没有人会调用这个ext是否有一种方法,并且没有给多少天的时间来添加或删除?
{
let date = Date()
let calendar = Calendar.current
var year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let pastyear = year - 100
var someInts = [Int]()
printLog(msg: "\(day):\(month):\(year)" )
for _ in pastyear...year {
year -= 1
print("\(year) ")
someInts.append(year)
}
print(someInts)
}
extension Date {
func dateBeforeOrAfterFromToday(numberOfDays :Int?) -> Date {
let resultDate = Calendar.current.date(byAdding: .day, value: numberOfDays!, to: Date())!
return resultDate
}
}
let dateBefore = Date().dateBeforeOrAfterFromToday(numberOfDays : -7)
let dateAfter = Date().dateBeforeOrAfterFromToday(numberOfDays : 7)
print ("dateBefore : \(dateBefore), dateAfter :\(dateAfter)")
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)!
}
}
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
}