БлогNot. PHP: простое вычисление количества дней между датами?

PHP: простое вычисление количества дней между датами?

Эта статья устарела, решение проблемы есть, например, тут.

Понадобилось вывести очередное "количество дней", только средствами PHP.

Решение на методе DateTime::diff требует версии PHP не ниже 5.3.0, которая на данный момент есть далеко не на всех хостингах, особенно платных (изменился ряд глобальных настроек, скрипты пользователей могут перестать работать просто из-за короткого стиля тега PHP вместо длинного).

А вот этот совсем простой код, казалось бы, решает все проблемы:

<?php
 echo 'on server now is '.date("d.m.Y",strtotime("now")).', number of days = ';
                //дата пишется в формате ГГГГ-ММ-ДД!
 echo floor((strtotime("now")-strtotime("2000-12-31"))/86400);
?>

Вывод этого скрипта:

on server now is 24.03.2015, number of days = 5196

Увы, у такого подхода тоже есть недостатки - во-первых, функция strtotime считает разницу дней относительно текущего времени на сервере, а оно может не совпадать с нужным Вам (у вас уже следующие сутки, а в Москве - нет). Так что лучше выводить количество дней вместе с текущей датой сервера, во избежание недоразумений.

Во-вторых, функция strtotime во многих версиях PHP тоже глючна:

  • В версиях PHP 5 до 5.2.7 глючило с первыми числами месяца;
  • В версиях до 5.0.2 глючило даже "now".

Также до версии PHP 5.1.0 не все платформы поддерживают отрицательные метки времени, поэтому поддерживаемый диапазон дат может быть ограничен Эпохой Unix (даты ранее 1 января 1970 г. не будут работать в Windows, некоторых дистрибутивах Linux и ряде других операционных систем).

Стандартный мануал также не рекомендует использовать эту функцию для математических операций с датой/временем.

Так что, для определения "количества дней, которое живёт сайт" код вполне годится, но в качестве универсального решения может и не подходить.

24.03.2015, 17:24 [9039 просмотров]


теги: ошибка php дата время

К этой статье пока нет комментариев, Ваш будет первым