DateTime.swift 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // LoopFollow
  2. // DateTime.swift
  3. import Foundation
  4. class dateTimeUtils {
  5. static func getTimeIntervalMidnightToday() -> TimeInterval {
  6. let now = Date()
  7. let formatter = DateFormatter()
  8. formatter.dateFormat = "yyyy-MM-dd"
  9. let dayString = formatter.string(from: now)
  10. var midnight = dayString + " 00:00:00"
  11. let newFormatter = DateFormatter()
  12. newFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  13. newFormatter.locale = Locale(identifier: "en_US")
  14. let newDate = newFormatter.date(from: midnight)
  15. guard let midnightTimeInterval = newDate?.timeIntervalSince1970 else { return 0 }
  16. return midnightTimeInterval
  17. }
  18. static func getTimeIntervalMidnightYesterday() -> TimeInterval {
  19. let now = Date().addingTimeInterval(-86400)
  20. let formatter = DateFormatter()
  21. formatter.dateFormat = "yyyy-MM-dd"
  22. let dayString = formatter.string(from: now)
  23. var midnight = dayString + " 00:00:00"
  24. let newFormatter = DateFormatter()
  25. newFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  26. newFormatter.locale = Locale(identifier: "en_US")
  27. let newDate = newFormatter.date(from: midnight)
  28. guard let midnightTimeInterval = newDate?.timeIntervalSince1970 else { return 0 }
  29. return midnightTimeInterval
  30. }
  31. static func getTimeIntervalNHoursAgo(N: Int) -> TimeInterval {
  32. let today = Date()
  33. let nHoursAgo = Calendar.current.date(byAdding: .hour, value: -N, to: today)!
  34. return nHoursAgo.timeIntervalSince1970
  35. }
  36. static func getNowTimeIntervalUTC() -> TimeInterval {
  37. let now = Date()
  38. let formatter = DateFormatter()
  39. formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  40. formatter.locale = Locale(identifier: "en_US")
  41. formatter.timeZone = TimeZone(abbreviation: "UTC")
  42. let utc = formatter.string(from: now)
  43. let day = formatter.date(from: utc)
  44. guard let utcTime = day?.timeIntervalSince1970 else { return 0 }
  45. return utcTime
  46. }
  47. static func getDateTimeString(addingHours hours: Int? = nil, addingDays days: Int? = nil) -> String {
  48. let currentDate = Date()
  49. var date = currentDate
  50. if let hoursToAdd = hours {
  51. date = Calendar.current.date(byAdding: .hour, value: hoursToAdd, to: currentDate)!
  52. }
  53. if let daysToAdd = days {
  54. date = Calendar.current.date(byAdding: .day, value: daysToAdd, to: currentDate)!
  55. }
  56. let dateFormatter = DateFormatter()
  57. dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
  58. dateFormatter.locale = Locale(identifier: "en_US")
  59. dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
  60. return dateFormatter.string(from: date)
  61. }
  62. static func printNow() -> String {
  63. let date = Date()
  64. let formatter = DateFormatter()
  65. formatter.dateFormat = "HH:mm:ss"
  66. formatter.locale = Locale(identifier: "en_US")
  67. return formatter.string(from: date)
  68. }
  69. static func is24Hour() -> Bool {
  70. let dateFormat = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
  71. return dateFormat.firstIndex(of: "a") == nil
  72. }
  73. static func formattedDate(from date: Date?) -> String {
  74. guard let date = date else {
  75. return "Unknown"
  76. }
  77. let dateFormatter = DateFormatter()
  78. dateFormatter.dateStyle = .short
  79. dateFormatter.timeStyle = .short
  80. dateFormatter.locale = Locale.current
  81. return dateFormatter.string(from: date)
  82. }
  83. }