Как мне выполнить +1 или -1 в день, который я выбрал на предыдущем экране? - PullRequest
0 голосов
/ 08 мая 2019

Я хочу добавить / или вычесть день из выбранной даты.Например, пользователь выбирает 09-10-2019 , когда пользователь нажимает кнопку, дата должна быть 10-10-2019 .

Я не пытаюсьдобавить или уменьшить день от текущей даты.

На предыдущем экране у меня есть переменная -> которая выбрана пользователем и не является статичной

selecteddate = "09.10.2019"

Я объявил ее как глобальную переменную, чтобы ее можно было использовать на нескольких экранах, поэтому на этом экране я получаю эту «выбранную дату».

У меня 3 UIButtons .кнопка вчера, selecteddate и кнопка завтра

  • Когда пользователь нажимает кнопку вчера, тогда 1 день должен быть уменьшен из переменной selecteddate
  • Когда пользователь нажимает кнопку завтра, тогда 1 день должен быть добавлен к selecteddate'variable.

Я следовал тому, что сказал ответ.Но, к сожалению, моя выбранная дата была строкой, и мне нужно было отправить строку в API в ее формате.Итак, я сделал следующее.

let dateFormattera = DateFormatter()
dateFormattera.dateFormat = "dd.MM.yyyy"
let date = dateFormattera.date(from: datetoday)
let newdate = Calendar.current.date(byAdding: .day, value: +1, to: date!)
let dateFormatterb = DateFormatter()
dateFormatterb.dateFormat = "dd.MM.yyyy"
let tomorrowdate = dateFormatterb.string(from: newdate!)



let dateFormatterx = DateFormatter()
let day = dateFormatterx.date(from: datetoday)
let newday = Calendar.current.date(byAdding: .day, value: +1, to: date!)
let dateFormattery = DateFormatter()
dateFormattery.dateFormat = "EEE"
let tomorrowday = dateFormattery.string(from: newdate!)

В этом может быть ненужный код, но это заставило все работать как надо.Это получает ДАТУ и ДЕНЬ.Я должен был использовать это, потому что преобразование строки в дату добавило +1 день к дате (из-за времени UTC 18:00), несмотря на выполнение -1 или + 1

Ответы [ 3 ]

3 голосов
/ 08 мая 2019

Я предлагаю вам использовать:

Calendar.current.date(byAdding: .day, value: 1, to: selecteddate)

Это добавит один день к selecteddate

Тогда, если у вас есть 2 кнопки, как вы объяснили, вы можете установить tag для каждой кнопки:

  • yesterdaybutton.tag = -1
  • tomorrowbutton.tag = 1

Мы будем использовать тег каждой кнопки для добавления или уменьшения дней с selecteddate

Итак, обе кнопки будут использовать это:

 @IBAction func buttonAction(_ sender: UIButton) {
        let newDate = Calendar.current.date(byAdding: .day, value: sender.tag, to: selecteddate)
    }
1 голос
/ 08 мая 2019

Вам все еще нужно преобразовать вашу строку в конкретный объект, который в вашем случае равен Date.К нему вы можете добавлять или вычитать компоненты, как вы хотите.В вашем случае это одни дни.Проверьте следующее:

func addDays(_ days: Int, toDate dateString: String?) throws -> String {

    guard let dateString = dateString else { throw NSError(domain: "Add days", code: 400, userInfo: ["dev_message": "String is null"]) }

    let formatter = DateFormatter()
    formatter.dateFormat = "dd'.'MM'.'yyyy"
    // formatter.dateFormat = "MM'.'dd'.'yyyy" // Not sure which

    guard let date = formatter.date(from: dateString) else { throw NSError(domain: "Add days", code: 400, userInfo: ["dev_message": "Incorrect date format. Expecting \(formatter.dateFormat!)"]) }

    guard let newDate = formatter.calendar.date(byAdding: {
        var components: DateComponents = DateComponents()
        components.day = days
        return components
    }(), to: date) else { throw NSError(domain: "Add days", code: 400, userInfo: ["dev_message": "Could not add days for some reason"]) }

    return formatter.string(from: newDate)
}

Я попытался использовать следующее:

print(try! addDays(1, toDate: "09.10.2019")) // Prints 10.10.2019
print(try! addDays(30, toDate: "09.10.2019")) // Prints 08.11.2019
print(try! addDays(-1, toDate: "09.10.2019")) // Prints 08.10.2019

Так что в вашем случае вам нужно addDays(1, toDate: "09.10.2019"), чтобы перейти на следующий день и addDays(-1, toDate: "09.10.2019") для предыдущего дня.

1 голос
/ 08 мая 2019

Вы можете создать метод, как показано ниже, который вычисляет дату.

func calculateDate(fromDate date: Date, withUnit value: Int) -> Date? {

    return Calendar.current.date(byAdding: .day, value: value, to: date)

}

Как это использовать?

Когда выбрана вчера кнопка, вам нужен метод вызова, как показано ниже ...

if let date = calculateDate(fromDate: selecteddate, withUnit: -1) {
    print(date)
} else {
   print("date is nil. may be due to different formats of dates")
}

Когда кнопка завтра выбрана, вам нужен метод вызова, как показано ниже ...

if let date = calculateDate(fromDate: selecteddate, withUnit: 1) {
    print(date)
} else {
   print("date is nil. may be due to different formats of dates")
}

Примечание. При необходимости используйте формат даты. Формат даты должен быть одинаковым для всех дат.

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