Как узнать, является ли указанная дата c месяцем или неделей до родительской даты? - PullRequest
0 голосов
/ 28 февраля 2020

Допустим, у меня есть программа, которая напоминает пользователям об их назначениях, с текущей даты до даты назначения, я хочу выяснить, является ли конкретная дата неделей до назначения или месяцем до назначения.

var startDate = startDate
let calendar = Calendar.current

let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"

while startDate <= endDate {

    var  newDate = calendar.date(byAdding: .day, value: 1, to: startDate)!


    if newDate is a month to endDate {

        //schedule reminder
    }

    if newDate is a week to endDate{

        //schedule reminder
    }

как я могу проверить, является ли текущая дата неделей / месяцем до встречи?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Попробуйте рассчитать продолжительность в днях

func DateFormat() -> DateFormatter {
  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "dd/MM/yyyy"
  dateFormatter.timeZone = TimeZone(abbreviation: "GMT")
  return dateFormatter
}

var appointementDate: Date?
var today = Date()

appointementDate = DateFormat().date(from: "22/02/2020")
today = DateFormat().date(from: DateFormat().string(from: today))!

let timeInterval = Int(exactly: (today.timeIntervalSince(appointementDate!))) ?? 0
print("\(timeInterval/86400) days left")
0 голосов
/ 28 февраля 2020

Вам не нужно использовать какое-либо сравнение дат, вы можете просто сгенерировать даты уведомлений, используя Calendar.date(byAdding:value:to:) и просто передав правильные компоненты. Чтобы установить дату за 1 неделю / месяц до endDate, передайте -1 значение.

let oneWeekBeforeAppointment = Calendar.current.date(byAdding: .weekOfYear, value: -1, to: endDate)!
let oneMonthBeforeAppointment = Calendar.current.date(byAdding: .month, value: -1, to: endDate)!
...