Как узнать то, чем дата была 5 дней назад?

Группа отправки хороша, но порядок отправленных запросов случайный.

Finished request 1
Finished request 0
Finished request 2

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

public class RequestItem: NSObject {
    public var urlToCall: String = ""
    public var method: HTTPMethod = .get
    public var params: [String: String] = [:]
    public var headers: [String: String] = [:]
}


public func trySendRequestsNotSent (trySendRequestsNotSentCompletionHandler: @escaping ([Error]) -> () = { _ in }) {

    // If there is requests
    if !requestItemsToSend.isEmpty {
        let requestItemsToSendCopy = requestItemsToSend

        NSLog("Send list started")
        launchRequestsInOrder(requestItemsToSendCopy, 0, [], launchRequestsInOrderCompletionBlock: { index, errors in
            trySendRequestsNotSentCompletionHandler(errors)
        })
    }
    else {
        trySendRequestsNotSentCompletionHandler([])
    }
}

private func launchRequestsInOrder (_ requestItemsToSend: [RequestItem], _ index: Int, _ errors: [Error], launchRequestsInOrderCompletionBlock: @escaping (_ index: Int, _ errors: [Error] ) -> Void) {

    executeRequest(requestItemsToSend, index, errors, executeRequestCompletionBlock: { currentIndex, errors in
        if currentIndex < requestItemsToSend.count {
            // We didn't reach last request, launch next request
            self.launchRequestsInOrder(requestItemsToSend, currentIndex, errors, launchRequestsInOrderCompletionBlock: { index, errors in

                launchRequestsInOrderCompletionBlock(currentIndex, errors)
            })
        }
        else {
            // We parse and send all requests
            NSLog("Send list finished")
            launchRequestsInOrderCompletionBlock(currentIndex, errors)
        }
    })
}

private func executeRequest (_ requestItemsToSend: [RequestItem], _ index: Int, _ errors: [Error], executeRequestCompletionBlock: @escaping (_ index: Int, _ errors: [Error]) -> Void) {
    NSLog("Send request %d", index)
    Alamofire.request(requestItemsToSend[index].urlToCall, method: requestItemsToSend[index].method, parameters: requestItemsToSend[index].params, headers: requestItemsToSend[index].headers).responseJSON { response in

        var errors: [Error] = errors
        switch response.result {
        case .success:
            // Request sended successfully, we can remove it from not sended request array
            self.requestItemsToSend.remove(at: index)
            break
        case .failure:
            // Still not send we append arror
            errors.append(response.result.error!)
            break
        }
        NSLog("Receive request %d", index)
        executeRequestCompletionBlock(index+1, errors)
    }
}

Вызов:

trySendRequestsNotSent()

Результат:

Send list started
Send request 0
Receive request 0
Send request 1
Receive request 1
Send request 2
Receive request 2
...
Send list finished

Подробнее см. Gist

52
задан Yeti 25 April 2010 в 05:20
поделиться

5 ответов

Я думаю, что это можно сделать так:

$days_ago = date('Y-m-d', strtotime('-5 days', strtotime('2008-12-02')));
109
ответ дан 7 November 2019 в 09:05
поделиться

простой способ найти то же

$date = date("Y-m-d", strtotime('-5 days', strtotime('input_date')));
0
ответ дан 7 November 2019 в 09:05
поделиться

Просто сделайте это... надеется, что помогает

$fifteendaysago = date_create('15 days ago');
echo date_format($fifteendaysago, 'Y-m-d');
0
ответ дан 7 November 2019 в 09:05
поделиться
define('SECONDS_PER_DAY', 86400);
$days_ago = date('Y-m-d', time() - 5 * SECONDS_PER_DAY);

Кроме этого, вы можете использовать strtotime для любой даты:

$days_ago = date('Y-m-d', strtotime('January 18, 2034') - 5 * SECONDS_PER_DAY);

Или, как вы использовали, mktime:

$days_ago = date('Y-m-d', mktime(0, 0, 0, 12, 2, 2008) - 5 * SECONDS_PER_DAY);

Ну вы поняли. Ключ состоит в том, чтобы удалить из метки времени достаточно секунд.

11
ответ дан 7 November 2019 в 09:05
поделиться

Если вам нужен метод, в котором вы знаете алгоритм, или функции, упомянутые в предыдущем ответе, недоступны : преобразовать дату в число дней по юлианскому календарю (это способ отсчета дней с 1 января 4713 г. до н.э.), затем вычесть пять, а затем преобразовать обратно в календарную дату (год, месяц, день). Источником алгоритмов для двух преобразований является раздел 9 http://www.hermetic.ch/cal_stud/jdn.htm или http://en.wikipedia.org/wiki/Julian_day

1
ответ дан 7 November 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: