CustomDatePicker.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import SwiftUI
  2. struct CustomDatePicker: UIViewRepresentable {
  3. @Binding var selection: Date
  4. // Coordinator to handle date changes
  5. class Coordinator: NSObject {
  6. var parent: CustomDatePicker
  7. init(_ parent: CustomDatePicker) {
  8. self.parent = parent
  9. }
  10. @objc func dateChanged(_ sender: UIDatePicker) {
  11. let calendar = Calendar.current
  12. // Set the time of the selected date to 23:59:59 for any selected date
  13. if let adjustedDate = calendar.date(bySettingHour: 23, minute: 59, second: 59, of: sender.date) {
  14. parent.selection = adjustedDate
  15. } else {
  16. parent.selection = sender.date // Fallback in case something goes wrong
  17. }
  18. }
  19. }
  20. func makeUIView(context: Context) -> UIDatePicker {
  21. let datePicker = UIDatePicker()
  22. datePicker.datePickerMode = .date
  23. // Calculate yesterday's date at 23:59:59
  24. let today = Date()
  25. let calendar = Calendar.current
  26. if let yesterday = calendar.date(byAdding: .day, value: -1, to: today),
  27. let adjustedYesterday = calendar.date(bySettingHour: 23, minute: 59, second: 59, of: yesterday)
  28. {
  29. datePicker.maximumDate = adjustedYesterday // Set maximum date to yesterday at 23:59:59
  30. datePicker.date = adjustedYesterday // Set default date to yesterday at 23:59:59
  31. }
  32. // Set up the date change action
  33. datePicker.addTarget(context.coordinator, action: #selector(Coordinator.dateChanged(_:)), for: .valueChanged)
  34. return datePicker
  35. }
  36. func updateUIView(_ uiView: UIDatePicker, context _: Context) {
  37. // Ensure the displayed date is also adjusted to 23:59:59
  38. let calendar = Calendar.current
  39. if let adjustedDate = calendar.date(bySettingHour: 23, minute: 59, second: 59, of: selection) {
  40. uiView.date = adjustedDate
  41. }
  42. }
  43. func makeCoordinator() -> Coordinator {
  44. Coordinator(self)
  45. }
  46. }