2012-01-25 3 views
0

Я хочу преобразовать 12/31/2099 в Unix, используя PHP. Я попробовал strtotime('12/31/2099'), но функция возвращает null.PHP unix time conversion

Я попытался преобразовать его в Unix-время, используя инструмент онлайн-преобразования, который дает 4102358400, который, когда он превращается в дату, дает 01/18/2038.

Как я могу конвертировать даты в Unix и снова преобразовывать их обратно в читаемый формат, например 12/31/2099?

+0

как дополнительный вопрос, что бы число будет для 12/31/2099? – commonpike

ответ

1

32-разрядные временные метки Unix заканчиваются в 2038 году, поэтому, если вы находитесь в 32-разрядной системе, это вызовет проблему.

+2

Ссылка для справки: http://en.wikipedia.org/wiki/Year_2038_problem –

+0

@Rocket Я ценю ссылку. – Josh

1

Unix временная метка точки во времени - это количество секунд с 1970-01-01 00:00:00 по UTC к этому моменту времени. В 2038-01-18 это переполнит 32-битный подписанный int - назовите его ошибкой в ​​Y2K.

Помните, что это проблема реализации, а не алгорифм: в большинстве современных реализаций используется 32-значный 32-битный int, но следует ожидать, что 32-битные int будут ушли в прошлое за некоторое время до 2038 года

Обычные обходные пути включают ветку if, чтобы определить, установлена ​​ли дата после обхода и соответствующим образом скорректировать.

+0

Какова будет последняя дата или время для 32-битной системы? –

+0

@RahulSingh: 03:14:07 UTC во вторник, 19 января 2038 года (http://en.wikipedia.org/wiki/Year_2038_problem) –

2

В старых версиях PHP (< 5.1.0) strtotime поддерживала максимальную дату Вт, 19 янв. 2038 03:14:07 UTC. Чтобы обойти это ограничение, обновите его до версии 5.1.0 или новее.

64-разрядные версии не подвержены этому ограничению.

Для получения дополнительной информации см Примечания: на http://www.php.net/strtotime