Ios 从出生日期算起年龄
我从出生日期算不出年龄。我得到的是Ios 从出生日期算起年龄,ios,swift,Ios,Swift,我从出生日期算不出年龄。我得到的是 fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 我的代码 override func viewDidLoad() { super.viewDidLoad() var dateString = user.birthday var dateFormatter = NSDateFormatter() // t
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
我的代码
override func viewDidLoad() {
super.viewDidLoad()
var dateString = user.birthday
var dateFormatter = NSDateFormatter()
// this is imporant - we set our input date format to match our input string
dateFormatter.dateFormat = "dd-MM-yyyy"
// voila!
var dateFromString = dateFormatter.dateFromString(dateString)
let age = calculateAge(dateFromString!)
}
func calculateAge (birthday: NSDate) -> NSInteger {
var userAge : NSInteger = 0
var calendar : NSCalendar = NSCalendar.currentCalendar()
var unitFlags : NSCalendarUnit = NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay
var dateComponentNow : NSDateComponents = calendar.components(unitFlags, fromDate: NSDate())
var dateComponentBirth : NSDateComponents = calendar.components(unitFlags, fromDate: birthday)
if ( (dateComponentNow.month < dateComponentBirth.month) ||
((dateComponentNow.month == dateComponentBirth.month) && (dateComponentNow.day < dateComponentBirth.day))
)
{
return dateComponentNow.year - dateComponentBirth.year - 1
}
else {
return dateComponentNow.year - dateComponentBirth.year
}
}
override func viewDidLoad(){
super.viewDidLoad()
var dateString=user.birth
var dateFormatter=NSDateFormatter()
//这很重要-我们将输入日期格式设置为与输入字符串匹配
dateFormatter.dateFormat=“dd-MM-yyyy”
//瞧!
var dateFromString=dateFormatter.dateFromString(dateString)
让年龄=计算年龄(dateFromString!)
}
func calculateAge(生日:NSDate)->NSInteger{
var userAge:NSInteger=0
var calendar:NSCalendar=NSCalendar.currentCalendar()
var unitFlags:NSCalendarUnit=NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay
var dateComponentNow:NSDateComponents=calendar.components(unitFlags,fromDate:NSDate())
var dateComponentBirth:NSDateComponents=calendar.components(unitFlags,fromDate:birthday)
如果((dateComponentNow.month
更新:Xcode 11•Swift 5.1
您可以使用日历方法dateComponents计算从特定日期到今天的年数:
extension Date {
var age: Int { Calendar.current.dateComponents([.year], from: self, to: Date()).year! }
}
在Swift 2.0+age中,计算代码应如下所示:
extension NSDate {
var age:Int {
return NSCalendar.currentCalendar()
.components(NSCalendarUnit.Year,
fromDate: self,
toDate: NSDate(),
options: NSCalendarOptions(rawValue: 0)
.year
}
}
只需使用DateTools吊舱。绝对是最简单的方法。 斯威夫特3
import DateTools
let birthday: Date = ....
let ageString = String((Date() as NSDate).years(from: birthday))
重要提示: 必须将时区设置为创建UTC出生日期,否则时区之间将存在不一致 斯威夫特3
extension Date {
//An integer representation of age from the date object (read-only).
var age: Int {
get {
let now = Date()
let calendar = Calendar.current
let ageComponents = calendar.dateComponents([.year], from: self, to: now)
let age = ageComponents.year!
return age
}
}
init(year: Int, month: Int, day: Int) {
var dc = DateComponents()
dc.year = year
dc.month = month
dc.day = day
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
if let date = calendar.date(from: dc) {
self.init(timeInterval: 0, since: date)
} else {
fatalError("Date component values were invalid.")
}
}
}
用法:
let dob = Date(year: 1975, month: 1, day: 1)
let age = dob.age
print(age)
你在哪一行得到错误?dateString的内容是什么?最有可能的原因是
let age=calculateAge(dateFromString!)
。如果不知道在Swift2@SwiftArchitect中要实现什么dateString
containsHow,就很难提出解决方案?为什么要使用DateComponents扩展?它使用现有的init方法public-init编译(并运行)得很好(在Xcode 8 beta 4中)(日历:日历?=默认,时区:时区?=默认,纪元:整数?=默认,年:整数?=默认,月:整数?=默认,日:整数?=默认,小时:整数?=默认,分钟:整数?=默认,秒:整数?=默认,纳秒:整数?=默认,工作日:整数?=默认,工作日:整数?=默认,季度:整数?=默认,周:整数=默认值,weekOfYear:Int?=默认值,yearForWeekOfYear:Int?=默认值)
let dob = Date(year: 1975, month: 1, day: 1)
let age = dob.age
print(age)