如何提取自 Swift 中的日期以来的年数、月数和天数
How can I extract number of years, months, and days since a date in Swift
如何提取自 Swift.
中的日期以来的年数、月数和天数
到目前为止,我在名为 DatePickerController
.
的 class 文件中有以下代码
class DatePickerController: UIViewController {
@IBOutlet var datePicker:UIDatePicker!
@IBOutlet var dateDisplay: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func datePickerChanged(sender: AnyObject) {
setDate()
}
let dateFormatter = NSDateFormatter()
// MARK: - Date Format
func setDate() {
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateDisplay.text = dateFormatter.stringFromDate(datePicker.date)
}
}
我会为年、月、日创建单独的 UILables
。
您可以使用 NSCalendar
获取两个日期之间的 NSDateComponents
。在 Swift 3:
let components = Calendar.current.dateComponents([.day, .month, .year], from: date1, to: date2)
let dayString = "\(components.day!)"
let monthString = "\(components.month!)"
let yearString = "\(components.year!)"
或在Swift 2:
let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: date1, toDate: date2, options: [])
let dayString = "\(components.day)"
let monthString = "\(components.month)"
let yearString = "\(components.year)"
也许更简单,如果你想用一个字符串表示这两个日期之间经过的时间,你可以使用 NSDateComponentsFormatter
,例如 Swift 3:
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.day, .month, .year]
formatter.unitsStyle = .full
let string = formatter.string(from: date1, to: date2)
或在Swift 2:
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Day, .Month, .Year]
formatter.unitsStyle = .Full
let string = formatter.stringFromDate(date1, toDate: date2)
这个字符串也是本地化的。
您可以使用 NSDateComponents
通过 NSCalender
的方法 components(fromDate: toDate: options:)
检索年月日
示例
let date = NSDate(timeIntervalSinceNow: -123123123)
extension NSDate {
func intereval(date:NSDate) -> (year: Int, month:Int, day:Int) {
let calender = NSCalendar.currentCalendar()
let components = calender.components([.Year, .Month, .Day], fromDate: date, toDate: self, options:.MatchStrictly)
return (components.year, components.month, components.day)
}
}
let component = NSDate().intereval(date)
print(component.year)
print(component.month)
print(component.day)
如您所说,每个日期组件都需要 UILabel。然后,您可以使用自定义日期格式字符串而不是使用 NSDateFormatterStye.ShortStyle
来提取组件。这为您提供了最大的灵活性。格式字符串遵循 unicode standard.
我无法在您的项目上下文中测试代码,但如果您添加标签并将它们正确连接到 Xcode,我相信这段代码将完全符合您的要求:
class DatePickerController: UIViewController {
@IBOutlet var datePicker:UIDatePicker!
@IBOutlet var dayDisplay: UILabel!
@IBOutlet var monthDisplay: UILabel!
@IBOutlet var yearDisplay: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func datePickerChanged(sender: AnyObject) {
setDate()
}
let dateFormatter = NSDateFormatter()
// MARK: - Date Format
func setDate() {
dateFormatter.dateFormat = "dd"
dayDisplay.text = dateFormatter.stringFromDate(datePicker.date)
dateFormatter.dateFormat = "MM"
monthDisplay.text = dateFormatter.stringFromDate(datePicker.date)
dateFormatter.dateFormat = "yyyy"
yearDisplay.text = dateFormatter.stringFromDate(datePicker.date)
}
}
import Foundation
let now = NSDate()
now.description.characters.split {
" -".characters.contains([=10=])
}.enumerate().forEach {
print([=10=].0,String([=10=].1))
}
/*
0 2015
1 12
2 26
3 19:34:33
4 +0000
*/
如何提取自 Swift.
中的日期以来的年数、月数和天数到目前为止,我在名为 DatePickerController
.
class DatePickerController: UIViewController {
@IBOutlet var datePicker:UIDatePicker!
@IBOutlet var dateDisplay: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func datePickerChanged(sender: AnyObject) {
setDate()
}
let dateFormatter = NSDateFormatter()
// MARK: - Date Format
func setDate() {
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateDisplay.text = dateFormatter.stringFromDate(datePicker.date)
}
}
我会为年、月、日创建单独的 UILables
。
您可以使用 NSCalendar
获取两个日期之间的 NSDateComponents
。在 Swift 3:
let components = Calendar.current.dateComponents([.day, .month, .year], from: date1, to: date2)
let dayString = "\(components.day!)"
let monthString = "\(components.month!)"
let yearString = "\(components.year!)"
或在Swift 2:
let components = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: date1, toDate: date2, options: [])
let dayString = "\(components.day)"
let monthString = "\(components.month)"
let yearString = "\(components.year)"
也许更简单,如果你想用一个字符串表示这两个日期之间经过的时间,你可以使用 NSDateComponentsFormatter
,例如 Swift 3:
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.day, .month, .year]
formatter.unitsStyle = .full
let string = formatter.string(from: date1, to: date2)
或在Swift 2:
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Day, .Month, .Year]
formatter.unitsStyle = .Full
let string = formatter.stringFromDate(date1, toDate: date2)
这个字符串也是本地化的。
您可以使用 NSDateComponents
通过 NSCalender
components(fromDate: toDate: options:)
检索年月日
示例
let date = NSDate(timeIntervalSinceNow: -123123123)
extension NSDate {
func intereval(date:NSDate) -> (year: Int, month:Int, day:Int) {
let calender = NSCalendar.currentCalendar()
let components = calender.components([.Year, .Month, .Day], fromDate: date, toDate: self, options:.MatchStrictly)
return (components.year, components.month, components.day)
}
}
let component = NSDate().intereval(date)
print(component.year)
print(component.month)
print(component.day)
如您所说,每个日期组件都需要 UILabel。然后,您可以使用自定义日期格式字符串而不是使用 NSDateFormatterStye.ShortStyle
来提取组件。这为您提供了最大的灵活性。格式字符串遵循 unicode standard.
我无法在您的项目上下文中测试代码,但如果您添加标签并将它们正确连接到 Xcode,我相信这段代码将完全符合您的要求:
class DatePickerController: UIViewController {
@IBOutlet var datePicker:UIDatePicker!
@IBOutlet var dayDisplay: UILabel!
@IBOutlet var monthDisplay: UILabel!
@IBOutlet var yearDisplay: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func datePickerChanged(sender: AnyObject) {
setDate()
}
let dateFormatter = NSDateFormatter()
// MARK: - Date Format
func setDate() {
dateFormatter.dateFormat = "dd"
dayDisplay.text = dateFormatter.stringFromDate(datePicker.date)
dateFormatter.dateFormat = "MM"
monthDisplay.text = dateFormatter.stringFromDate(datePicker.date)
dateFormatter.dateFormat = "yyyy"
yearDisplay.text = dateFormatter.stringFromDate(datePicker.date)
}
}
import Foundation
let now = NSDate()
now.description.characters.split {
" -".characters.contains([=10=])
}.enumerate().forEach {
print([=10=].0,String([=10=].1))
}
/*
0 2015
1 12
2 26
3 19:34:33
4 +0000
*/