【发布时间】:2016-04-13 19:50:43
【问题描述】:
我有一个日期选择器(日期类型),它要求用户选择他/她的出生日期。
如何获取出生日期的日期部分。组件(日、月、年)。
我可以从 Datepicker 获取 NSDate,然后使用日历获取组件。但这似乎是一种迂回的方式。 Datepicker 已经对公历做出了假设。
我可以直接从 Datepicker 获取组件而无需通过 NSDate。
【问题讨论】:
标签: swift date datepicker
我有一个日期选择器(日期类型),它要求用户选择他/她的出生日期。
如何获取出生日期的日期部分。组件(日、月、年)。
我可以从 Datepicker 获取 NSDate,然后使用日历获取组件。但这似乎是一种迂回的方式。 Datepicker 已经对公历做出了假设。
我可以直接从 Datepicker 获取组件而无需通过 NSDate。
【问题讨论】:
标签: swift date datepicker
您必须通过 NSCalender 获取组件,但它可能是 NSDatePicker 已经在使用的组件:
let components = datePicker.calendar.components([.Day, .Month, .Year], fromDate: datePicker.date)
let day = components.day
let month = components.month
let year = components.year
【讨论】:
SWIFT 5 更新
// Get date picker data
let components = datePicker.calendar.dateComponents([.day, .month, .year],
from: datePicker.date)
let day = components.day
let month = components.month
let year = components.year
【讨论】:
您可以使用 NSCalendar 组件方法从日期选择器日期中提取您想要的任何组件。看看下面的例子:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
datePicker.datePickerMode = .Date
datePicker.minimumDate = NSCalendar.currentCalendar().dateByAddingUnit(.Year, value: -120, toDate: NSDate(), options: [])
datePicker.addTarget(self, action: "dateChanged:", forControlEvents: .ValueChanged)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func dateChanged(sender:UIDatePicker) {
print(sender.date.year)
print(sender.date.month)
print(sender.date.day)
print(NSCalendar.currentCalendar().components(.Year, fromDate: sender.date, toDate: NSDate(), options: []).year)
}
}
extension NSDate {
var day: Int {
return NSCalendar.currentCalendar().component(.Day, fromDate: self)
}
var month: Int {
return NSCalendar.currentCalendar().component(.Month, fromDate: self)
}
var year: Int {
return NSCalendar.currentCalendar().component(.Year, fromDate: self)
}
}
【讨论】: