Обработка дат в CMS Netcat или "век живи, век учись!"
Небольшая преамбула. Меня зовут Руслан, я занимаюсь программированием уже 25 лет, пережил и ДВК, и журналы с HEX-дампами игрушек, и ZX с паяльником в зубах, и ассемблер, и все последующее, присущее бородатым хакерам-динозаврам. :-) Да и на Netcat разработка сайтов уже седьмой год идет.

Но на днях столкнулся в этой CMS с совершенно непредвиденной для меня вещью.
Оказывается, strtotime("0000-00-00 00:00:00") (так хранятся дефолтные даты в Netcat, если поле компонента с датой обязательное, но не заполнено) возвращает false только на 32-битных серверах.
А если 64-битные - тогда возвращает отрицательное число, которое после обработки функцией date выдает какую-то древнюю дату "до нашей эры".  :)
Об этой особенности, как выяснилось, в инете много написано. Если по-простому - более мощный процессор умеет вычислять такие большие даты и возвращают по-честному вычисленную метку unixtime, а обычные 32-битные системы - не могут, вот и считают дату невалидной и возвращают false.

Я даже не подозревал о таком фокусе, и везде во всяких компонентах новостей, статей (там, где нужна возможность забивать свою дату вместо дефолтной), всегда делал проверку именно на false, а оказывается это неправильный подход.
Пришлось в netcat в компонентах, которые мы разработали, переделывать привычную методику:
date('d.m.Y', strtotime($f_ArticleDate)?:strtotime($f_Created))
На менее красивую:
date('d.m.Y', strtotime($f_ArticleDate)>0?strtotime($f_ArticleDate):strtotime($f_Created))
Зато работает корректно, независимо от разрядности процессора.

Вот так-то! Век живи, век учись.