64-битная проблема с отметкой времени php - PullRequest
3 голосов
/ 04 января 2010

Необходимо иметь возможность использовать даты, превышающие 32-разрядную временную отметку, поэтому обновите наш сервер до 64-разрядной версии Windows Server 2003. И работает php 5.2.5 64-bit. Однако все еще не может использовать даты за пределами 32-битного лимита.

echo strtotime ("11-11-2050");

ничего не возвращает.

Запуск php на IIS 6.0 с использованием C: \ WINDOWS \ system32 \ inetsrv \ fcgiext.dll

Дай мне знать, если я что-то упустил. Найдена библиотека дат Adodb, которая будет делать то, что мне нужно, но я бы предпочел использовать нативные функции php, поэтому мне не нужно изменять существующий код, если это возможно

Кто-нибудь знает, возможно ли заставить это работать на 64-битной Windows Server 2003?

спасибо

Ответы [ 5 ]

3 голосов
/ 04 января 2010

Используйте класс DateTime, так как он работает в 32-битной и 64-битной версиях и встроен в php5x

http://us.php.net/manual/en/class.datetime.php

<?php

$dateTime = new DateTime("+200 years");


echo $dateTime->format("Y-m-d H:i:s");

?>
2 голосов
/ 04 января 2010

Это предположительно было исправлено в 2008 году, о чем свидетельствует ошибка # 44209 .

derick@php.net говорит,

Эта ошибка была исправлена ​​в CVS.

Снимки источников упаковываются каждые три часа; это изменение будет в следующем снимке. Вы можете получить снимок на http://snaps.php.net/.

Спасибо за отчет и за то, что помогли нам улучшить PHP.

1 голос
/ 04 января 2010

Чтобы минимизировать переписывание кода:

<?php    
function adodb_strtotime($str) {
   $dateTime = new DateTime($str);
    return $dateTime->format("U");
}
?>

затем добавьте этот класс: http://phplens.com/phpeverywhere/adodb_date_library

тогда просто добавьте adodb_ перед всеми вашими обычными функциями даты. например, mktime будет adodb_mktime

дата будет adodb_date

strtotime будет adodb_strtotime ... вы поняли

1 голос
/ 04 января 2010

PHP пока не использует 64-битный time_t на Win32.

0 голосов
/ 04 января 2010

Я только что попробовал это на 32-битной машине, и это возвращает false с var_dump:

var_dump strtotime("11-11-2050");

echo ничего не возвращает, так как false не отображается. Я заметил php Changelog на http://php.net/manual/en/function.strtotime.php

5.1.0 Теперь возвращает FALSE при ошибке вместо -1.

Также примечание внизу этой страницы гласит:

Примечание. Допустимый диапазон отметок времени обычно от пт, 13 декабря 1901 г., 20:45:54 UTC до вт, 19 января 2038 03:14:07 UTC. (Это даты, которые соответствуют минимальным и максимальным значениям для 32-разрядного целого числа со знаком.) Кроме того, не все платформы поддерживают отрицательные временные метки, поэтому ваш диапазон дат может быть ограничен не ранее эпохи Unix. Это означает, что, например, даты, предшествующие 1 января 1970 года, не будут работать в Windows, некоторых дистрибутивах Linux и некоторых других операционных системах. PHP 5.1.0 и более новые версии преодолевают это ограничение.

Так что я думаю, что Windows, хотя это 64-битная версия, может использовать 32-битные целые числа с php. Вы установили 64-битную версию php?

phpinfo () должен быть в состоянии показать, какая версия php работает в системной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...