Я использовал strtotime PHP () метод для принятия поля даты на форме. Я люблю, насколько мощный это, в том, как это примет "Завтра", "В следующий четверг", или (предположительно) любое представление даты и преобразовывает его в метку времени Unix.
Это работало отлично - до вчерашнего дня. Кто-то вошел "2-4-10" и вместо того, чтобы регистрироваться 4-го февраля 2010, это зарегистрировалось 10 апреля 2002! Таким образом, это ожидало Y-M-D вместо M-D-Y.
Я думал, возможно, что проблема просто использовала 2-разрядный год, таким образом, мы попробовали еще раз с "2-4-2010". Это зарегистрировалось 2-го апреля 2010! В той точке я просто не понимаю то, что делает strtotime (). в PHP.net говорится, что это ожидает американский английский формат даты. Почему затем это приняло бы D-M-Y?
Существует ли путь вокруг этого? Или я должен прекратить использовать strtotime ()?
Примечание: Я сейчас сделал тест. При использовании наклонных черт вместо дефиса/тире он хорошо работает, даже с 04.02.10. С какой стати это имеет значение? И если это - все, что это, я должен просто выполнить str_replace (" - ", " / ", $input) на входе формы прежде, чем передать его strtotime ()?
Знак - указывает дату ISO:
03-02-01 => 1. february 2003 (ISO)
01.02.03 => 1. february 2003 (European)
02/01/03 => 1. february 2003 (US)
Проблема в том, что на самом деле это не то, как быстро работает. Quicksort - рекурсивный алгоритм, который должен вызываться только один раз вне себя. Идея заключается в том, что при каждой итерации массив разделяется на две половины - левая половина содержит все элементы, меньшие, чем ось вращения, а правая половина содержит все элементы, превышающие/равные оси вращения. Затем вы ускорите две половины и, наконец, положите ось в середине.
Если сторона быстрой сортировки имеет длину менее 3 элементов, можно просто поменять местами два элемента или оставить их, и эта часть массива будет выполнена.
Но не похоже, что ваш код делает это вообще - вы звоните Quicksort 6 раз от вашего клиента, и в рамках функции quicksort
вы делаете максимум один своп. Так что это не тот случай, когда кто-то сможет посмотреть на ваш код и отладить его, сказав вам перенести обмен или что-то еще. Вам нужно вернуться к своей логике.
Просмотрите диаграмму Википедии для наглядного примера того, что должно произойти в одной итерации:
http://en.wikipedia.org/wiki/File: Partition _ example.svg
-121--4222964- EventHandableList
используется классами, которые обеспечивают более эффективное выполнение большого количества событий. Поэтому все события для основной формы хранятся там.
Я ожидаю, что дочерняя форма отслеживала, когда ее родитель может закрыться (это обычный случай использования) и она не отписалась от события FormClosing
или FormClosed
, когда она получила это событие. Однако, это всего лишь предположение. Чтобы подтвердить, просмотрите реализацию дочерней формы и найдите все случаи, когда она подписывается на события из родительской формы, а затем убедитесь, что имеется соответствующая отмена подписки на эти события.
Обновить
Обнаруженный обработчик меню, который не был удален, вполне может быть корнем проблемы. Попробуйте добавить вызов remove и проверьте, устранена ли утечка.
Поведение strtotime ()
основано главным образом на форматах ввода даты GNU spec. Но не следует ожидать, что он будет читать мысли. Разрешение ввода даты пользователя в свободной форме требует постоянных проблем.
У меня была эта проблема, и я решил ее, выполнив именно то, что вы предложили - выполните str_replace
на введенную пользователем дату, чтобы заменить тире с косой чертой.Это предотвращает использование даты ISO в strtotime
и решает проблему.