Что же произойдет и в чем спасение? При разработке надстроек над движком сайта поздравлений с необычными юбилеями авторы (не самые большие специалисты в программировании) столкнулись с ограничениями, которые накладывают правила применения стандартных функции PHP и JavaScript на диапазон дат. После даже поверхностного исследования этого обстоятельства они убедились, что если за оставшиеся 973190252 секунды не предпринять радикальных мер, то 19 января 2038 года в 3 часа 14 минут 7 секунд Интернет ожидает неминуемая смерть.
Почему?
Если угроза 2000 года состояла в переполнении человеческого представления года (после 99 будет 00 год), то в 2038 году нас ждет переполнение компьютерного 32-разрядного представления даты. Дата и время обычно хранятся памяти компьютера в виде количества секунд, которые прошли с 0:00:00 1 января 1970 года (начало UNIX эпохи). Это количество секунд обычно является 32-битным числом со знаком, т. е. может принимать значения от -2147483648 до 2147483647. При этом если Вы поместите в ячейку памяти такого типа число 2147483647, а затем прибавите к нему 1, то в ней окажется не число 2147483648, как следовало бы ожидать, а число -2147483648. Проблема в том, что 03:14:07 19 января 2038 года пройдёт как раз 2147483647 секунд, если отсчитывать их от 1 января 1970 года. А после этого наступит та самая ошибка 2038.
Угроза 2038 на несколько порядков выше угрозы 2000.
Так ли это?
Все дело в том, что переполнение коснется не только BIOS материнских плат серверов, операционных систем, но и приложений и даже движков сайтов, которые, так или иначе, используют 4-х байтное представление даты, т.е. ПРАКТИЧЕСКИ ВСЕХ УРОВНЕЙ программного обеспечения! Кроме того, если проблема 2000 года, в основном, оказалась мифом, то проблема 2038 без миллиардных вложений в ПО всех уровней не разрешима.
После пары экспериментов с phpMyAdmin с удивлением обнаружилось, что он умрет немного раньше, а именно – в 2038 году, 1 января, 0 часов, 0 минут. Перевод любой даты в UNIX формат после этого момента дает false в результате. Может это php, а может и нет - жду комментов спецов для составления таблицы.
Отсюда еще одна угроза – из-за разных подходов в программировании функций времени в различных языках, операционных системах и приложениях - проблема начнет проявлять себя до наступления времени «Ч»!
P.S. Одно утешает - если считать что дата рождения Интернета 21 июня 1968 года, то впереди у него еще целая жизнь.
P.P.S Если бы разработчики ПО не пожадничали и добавили бы в представление даты хотя бы пару байт, мы бы чувствовали себя спокойно еще почти 9 миллионов лет.
P.P.P.S Тем не менее, все, кто родился до 19 января 2038 года могут получать напоминания о своих необычных юбилеях на электронную почту БЕСПЛАТНО. Зачем? А затем, что это добавит более 50 праздников в Вашу жизнь, причем праздников не таких как у всех!