Работа с датами в PHP. Часть 2

Размещено 14 декабря 2009 | Просмотров: 1,142
в рубрике PHP | 10 комментариев

Ужасно!ПлохоТак себеХорошоСупер! (1 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...

Работа с датой в PHPВ одном из предыдущих постов я начал рассматривать вопросы, касающиеся работы с датой в PHP. Напомню, что было рассмотрено, как сформировать текущую дату и дату «по-русски». Сегодня разберем вопрос сравнения дат.

PHP. Сравнение даты.

Очень часто возникает задача сравнить 2 даты, например такие:

1
2
3
4
<?php
  $date1 = "01-02-2010 12:00";
  $date2 = "31-12-2009 11:59";
?>

И задача часто ставится не просто сравнить 2 даты, но и вычислить, насколько одна больше другой. Воспользуемся для этого функцией mktime(). Эта функция позволяет перевести дату в таймстамп (timestamp), т.е. в количество секунд, прошедших с 00:00:00 01:01:1970. Формат у функции такой:

1
  int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

Для того, чтобы из нашей даты получить дни, месяцы и годы – необходимо извлечь их как из обычной строки. Т.е. для наших дат сравнение будет выглядеть следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
  $date1 = "01-02-2010 12:00";
  $date2 = "31-12-2009 11:59";
  $arr1 = explode(" ", $date1);
  $arr2 = explode(" ", $date2);  
  $arrdate1 = explode("-", $arr1[0]);
  $arrdate2 = explode("-", $arr2[0]);
  $arrtime1 = explode(":", $arr1[1]);
  $arrtime2 = explode(":", $arr2[1]);
  $timestamp2 = (mktime($arrtime2[0], $arrtime2[1], 0, $arrdate2[1],  $arrdate2[0],  $arrdate2[2]));
  $timestamp1 = (mktime($arrtime1[0], $arrtime1[1], 0, $arrdate1[1],  $arrdate1[0],  $arrdate1[2]));
  $difference = floor(($timestamp2 - $timestamp1)/86400);
  echo 'Разница между датами: '.$difference.' дня(-ей)';
?>

В результате получаем, что разница между этими датами составляет 33 дня. Кстати, функцию floor() мы применили для округления количества дней, а 86400 – именно столько секунд в одном дне.

Время Секунды
1 минута 60
1 час 3600
1 день 86400
1 неделя 604800

Если же Вам требуется вычислить разницу между текущим днем и расчетным – вместо переменной timestamp2 используйте функцию time(), о которой было сказано в первой части данного обзора.

Хотел еще написать несколько примеров, касающихся преобразования даты, но этих двух частях все основнын преобразования оказались уже рассмотрены. Если будут какие-то вопросы, задавайте в комментариях – дополню тогда посты ответами на них.

Просьба к читателям.

Это была первая серия постов на тему PHP. Уже более года она мне стала очень близка. Напишите, пожалуйста, в комментариях, нравится ли вам тематика PHP, в каком направлении хотелось бы видеть посты? Может вас интересует разбор каких-то готовых решений, скриптов… Вобщем жду Вашей реакции.

Похожие посты

  • Нет похожих постов

Этот блог находят по фразам:

Комментарии

Оставляй комментарии и попади в ТОП5 комментаторов!

10 комментариев на “Работа с датами в PHP. Часть 2”

  1. SeoAdvicer от 14 декабря 2009 15:46

    Подписался на ваш блог. И если честно, так как интересуюсь и пользуюсь php (уже написал пару полезных для себя скриптов), хотел бы видеть и разборы уже готовых скриптов, и конечно же ваши скрипты, и небольшие php-решения.
    Считаю, что все будет полезным.

  2. Семен Бруква от 14 декабря 2009 16:01

    2 SeoAdvicer
    А какого плана интересуют скрипты?

  3. SeoAdvicer от 15 декабря 2009 4:25

    Естественно связанные с SEO. :)

  4. Dekus от 8 января 2010 19:35

    Мог бы оформить функцией. Удобнее было бы тырить.

  5. Ольга от 30 января 2010 0:49

    Хм

  6. yuriy88 от 4 марта 2010 0:00

    Я видел как это делается с помощью ДжавыСкрипт.

  7. Сергей от 4 апреля 2010 17:20
  8. Ильин от 29 апреля 2010 17:13
  9. bookerslive.ru от 4 мая 2010 3:22

    bookerslive.ru…

    Уже более 3х лет вплотную обеспокоен этим вопросом и считаю ваши мысли немного поверхностными…

  10. joomla master от 23 мая 2010 19:31

    можно легко сравнить преобразовав даты к виду YYYY-MM-DD, если нужно узнать например больше или меньше

Написать комментарий





Вы не робот?