2010-02-02 7 views
2

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

Может ли кто-нибудь посоветовать?

Спасибо!

ответ

2

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

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

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

+0

+1 для Zend Framework – GZipp

+0

Даст ZEND выстрел – lphmedia

0

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

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

Если ваши просто глядя года, что простая математика

выше год - в начале года = года лет/10 = десятилетий.

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

+0

К сожалению, он должен – lphmedia

3

Если у вас есть PHP> = 5.3.0:.!

$before = new DateTime('1708-02-02'); 
$decades = $before->diff(new DateTime())->y/10; 
+0

+1 для встроенной функции. –

+0

Я застрял с 5.2 :-(- но это здорово! – lphmedia