如何从swift的当前日期开始接下来的10天

use*_*935 13 nsdateformatter ios swift

我有dateformat字符串,如"2015-03-09".如何从当前日期开始接下来的10天?任何帮助将不胜感激.谢谢提前

vtc*_*nes 22

对于纯粹的Swift 3解决方案:

__CODE__


thi*_*ift 17

以下是使用内置日期修改方法10天后获取日期的方法.dateByAddingUnit如果需要所有10天(日期),可以通过"value:10"部分循环并添加到数组中.

var tenDaysfromNow: NSDate {
    return NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: 10, toDate: NSDate(), options: [])!
    }

    print(tenDaysfromNow)
Run Code Online (Sandbox Code Playgroud)

而对于Swift3:

var tenDaysfromNow: Date {
   return (Calendar.current as NSCalendar).date(byAdding: .day, value: 10, to: Date(), options: [])!
}
Run Code Online (Sandbox Code Playgroud)


Mid*_* MP 7

您可以使用dateByAddingTimeInterval()方法.

var dateStr          = "2015-03-09"
var formatter        = NSDateFormatter()
formatter.dateFormat = "YYYY-MM-dd"
var currDate         = formatter.dateFromString(dateStr)

for i in 1...10
{
    var interval = NSTimeInterval(60 * 60 * 24 * i)
    var newDate = currDate?.dateByAddingTimeInterval(interval)
    println(newDate)
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@Martin R在评论中所提到的,使用NSCalendar类的dateByAddingComponents()会更好:

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var dateComponent = NSDateComponents()

for i in 1...10
{
    dateComponent.day = i
    var newDate = calendar?.dateByAddingComponents(dateComponent, toDate: currDate!, options:nil)
    println(newDate)

}
Run Code Online (Sandbox Code Playgroud)

  • 添加一天的正确方法是使用NSCalendar和NSDateComponents. (2认同)

Duy*_*Hoa 3

NSDate 对象有一个函数“dateByAddingTimeInterval()”。这样,您就可以从日期字符串创建 NSDate。然后加上 10 天 = 10*24*60*60 得到接下来 10 天的 NSDate 值

let today : NSDate = ....
let next10days = today.dateByAddingTimeInterval(10*60*60*24); //interval = seconds
//then you convert back to your date string format if you want, by using NSDateFormatter
Run Code Online (Sandbox Code Playgroud)

为了避免夏令时问题(@MartinR):

let cal = NSCalendar(calendarIdentifier: NSGregorianCalendar)
let next10Days = cal.dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: 10, toDate: today, options: nil)
Run Code Online (Sandbox Code Playgroud)

  • 不,一天不等于 60*60*24 秒。在实行夏令时的地区,一天可能有 23 或 25 小时。 (5认同)