Рассчитать разницу в датах с большим диапазоном с PHP - PullRequest
2 голосов
/ 02 февраля 2010

Мне нужно вычислить количество десятилетий между двумя возможными датами, охватывающими форму 1708 до сегодняшнего дня - насколько я могу судить, ограничения - 1970/1901 гг. Внутри собственных функций PHP.

Кто-нибудь может посоветовать?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 февраля 2010

Если у вас PHP> = 5.3.0:

$before  = new DateTime('1708-02-02');
$decades = $before->diff(new DateTime())->y / 10;
2 голосов
/ 02 февраля 2010

Вы можете использовать Zend_Date . Он является частью Zend Framework, но может использоваться автономно, вам не нужно устанавливать весь фреймворк, чтобы использовать его. Он может работать с датами после 1901 года, если в ваш PHP установлено расширение bcmath. Из теории работы Zend_date :

Это было возможно только потому, что Zend_Date не ограничен ни метками времени UNIX, ни целочисленными значениями. Расширение BCMath требуется для поддержки чрезвычайно больших дат вне диапазона Пт, 13 декабря 1901 г. 20:45:54 по Гринвичу до вторника, 19 января 2038 г. 03:14:07 по Гринвичу Дополнительные крошечные математические ошибки могут возникать из-за внутренних ограничений типов данных и округления, если не используется расширение BCMath.

Мне нравится рекомендовать компоненты Zend, потому что они ухожены, качественный код. Есть и другие решения для этого, хотя, например, с использованием функций даты MySQL .

0 голосов
/ 02 февраля 2010

Я бы написал собственный метод.

Функции даты в PHP основаны на эпохе (1969), поэтому там не будет большой помощи.

Если вы просто смотрите на годы, это простая математика

более высокий год - более ранний год = годы лет / 10 = десятилетия.

Если вы имеете в виду десятилетия с четным 01-10, 11-20, то вы можете сделать некоторое округление. (раунд ранней даты вверх, более поздней даты до ближайшего 10.

...