I want to set my dateField Label to show both the date as well as the weekday. Currently it only shows the date. I attempted to follow this question Displaying the Day Of The Week From Date Picker but it is not the solution for my case.
let picker = UIDatePicker()
func createDatePicker(){
let toolbar = UIToolbar()
toolbar.sizeToFit()
let done = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
toolbar.setItems([done], animated: false)
dateField.inputAccessoryView = toolbar
dateField.inputView = picker
picker.datePickerMode = .dateAndTime
}
@objc func donePressed(){
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
let dateString = formatter.string(from: picker.date)
dateField.text = "\(dateString)"
showTime()
self.view.endEditing(true)
}
@objc func datePickerValueChanged(sender: UIDatePicker){
let formatter = DateFormatter()
formatter.dateStyle = DateFormatter.Style.medium
formatter.timeStyle = DateFormatter.Style.none
dateField.text = formatter.string(from: sender.date)
}
func showTime(){
let formatter = DateFormatter()
formatter.dateStyle = DateFormatter.Style.none
formatter.timeStyle = DateFormatter.Style.short
timeField.text = formatter.string(from: picker.date)
}
Your question is really just about how to format a Date
to show a medium date format plus the weekday.
The only standard date style that shows the weekday is the .full
format but that is not what you want.
One solution is to set a specific dateFormat
such as yyyy-MM-dd, EEE
but you want a format appropriate for the user's locale.
The following will do what you need:
@objc func donePressed(){
let formatter = DateFormatter()
// MMMddyyyy is essentially the same as the "medium" format
formatter.setLocalizedDateFormatFromTemplate("MMMddyyyyEEE")
let dateString = formatter.string(from: picker.date)
dateField.text = "\(dateString)"
showTime()
self.view.endEditing(true)
}
In the USA, the format will become: "EEE, MMM dd, yyyy". In other locales it will show whatever is appropriate.