Strtotime работает, читая то, что вы даете ему в виде строки, и пытайтесь найти дату где-нибудь в нем.Поэтому, когда вы передали его "1306400175", он попытался найти формат YEAR-MONTH-DAY-HOUR -..., он знает, что ему соответствует, и, поскольку он, вероятно, находит что-то , он возвращает вам значениесоответствует дню, который, как он думает, он обнаружил.
Другими словами, он просто не работает так, как вы думаете, например, если вы выполните strtotime ("1400"), он вернет отметку времени, соответствующую TODAY в14:00.Таким образом, ваш код на самом деле терпит неудачу как в 32, так и в 64 битах, причина в том, что это другой результат, вероятно, потому, что целочисленное переполнение, когда его значение превышает PHP_INT_MAX (он достигает максимально возможных значений, которые он может иметь, поэтому он возвращается к минимальномуможет иметь), что отличается от 32-х и 64-х битных PHP.
Фактическим исправлением для вашей функции будет проверка того, что параметр не является числом перед передачей его в strtotime:
if (!is_numeric($param) && ($timestamp = strtotime($param)) {
Несмотря на то, что вам нужно убедиться, что вы действительно хотите разобрать строку даты / времени (например, «2011-04-08 14:00») в соответствующую метку времени.