Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
Не знам дали няма и други проблеми с кода, но със сигурност ти гърми функцията strtotime. Ако само 2 теста не ти минават, мисля, че само в нея е проблемът.
strtotime работи с ограничен диапазон от дати, между 1900 и 2080-2100, не съм сигурен точно за горната граница, но може да се провери. За да се избегне това трябва да се ползва DateTime обект и би трябвало да тръгне за 100. Не знам точно какви са тестовете, но мисля, че точно два има с дати извън тези стойности.
strtotime работи с 32 битов интеджър, когато UNIX времето прехвърли 2 млрд секунди, функцията спира да работи нормално. Т.е. горната граница е 2038 година
^ Точно така, от документацията: "The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer)."
ЦЪК - секция Changelog
Супер явно това е проблема. Не видях къде пише кой е валидния рейндж за класа DateTime. И изобщо каде могат да се видят тези неща. За командата която ползвах това го пише в changeloga защото са го променили в 5.1, но ако не бяха го променили къде мога да видя валидните дати?
Мерси много за помощта
ПП: това ме връща на предложението ми за подобряване на judge ако теста се казваше тест със години под 1900 и тест с година над 2038. щях да се сетя че проблема е във функцията за дата да се разтърся в нета и да разбера че функцията която ползвам е калпава и евнетуално да намеря по - добра.
Във всеки случай, когато не знаеш с какви стойности работи дадена функция и не може да ги намериш в нета, просто си тествай програмата с произволни стойности в широк диапазон. Аз на изпита така установих, че с дати след 2050 и преди 1900 връщам грешни резултати преди да реша да ползвам DateTime. Тук донякъде е проблем, че и в условието не е споменато (напълно умишлено предполагам) какви дати ще бъдат подадени на входа и трябва сам да се досетиш.
За самия DateTime, не знам да има някакви ограничения, но и да има такива това не е от особено значение тъй като няма какво друго да ползваш и без това.
мерси
@mar0der, Y2038 е common-known issue, както постнах има цяла статия в уикипедия. Трикът в тази задача е да се сетиш, че може да достигнаш до подобен проблем и да го избегнеш. Обикновено когато непрограмист (нормален клиент) поиска от теб да му направиш приложение, което работи с дати, той не е длъжен да ти каже, че ще работи с дати преди 1900 или след 2038 година, най-малкото защото не знае за този проблем, ти трябва обаче да се сетиш, че клиентът ти може да иска да ползва дата извън този диапазон и да избегнеш проблема преди да се е зародил.
DateTime API-а специално е странен (включително Обекто ориентирания и Процедурния), трудно можеш да разбереш някои неща как работят само от четене. На останалите функции, на които можеш да подадеш различно от mixed type пише какъв е типът. Когато пише "int" значи има голям шанс да не работи добре с числа, които прехвърлят ограничението на integer type-а в PHP. Примерно на rand() подай нещо по-голяма от макса на инт-а за платформата ти и ще почне да връща странни стойности, като -1 например
Да аз за първи път чувам за 2038 и изчетох цялата статия. Отдавна ползвам unix време и знам че интовете превъртат но някак си никога не бях свързвал двете неща и не се бях замислял за този проблем още повече, че ще се случи толкова скоро. Мерси за отговора. Иначе за идеята ми за наименуване на unit тестовете в judje може би това не е най - удачния пример но в повечето ситуации виждаш реузлтата и грешката от това което правиш и съответно можеш да коригираш кода си. Може пък да се направи като жокер ако много запънеш да видиш подсказката на тества (проба с години над 2038) и вече тия жокери да помагат в подреждане на хората с равни точки (които ползвл жокер се подрежда под тоя дето не е. И така истинските шампиони ще изплуват най - отгоре :) ). Така хем си взимаш изпита хем научаваш нещо. Особенно важи за нещо което си се борил сума време и ти се е наложило да вземеш жокер за да го решиш тогава ще ти остане в главта за винаги. Както на мен сега този проблем 2038 за който не бях чувал.