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

Размещено 14 декабря 2009 | Просмотров: 18 199
в рубрике PHP | 11 комментариев

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

Работа с датой в 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, в каком направлении хотелось бы видеть посты? Может вас интересует разбор каких-то готовых решений, скриптов… Вобщем жду Вашей реакции.

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

  • No Related Post

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

Комментарии

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

11 комментариев на “Работа с датами в 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. joomla master от 23 мая 2010 19:31

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

  8. webamator от 3 августа 2010 17:52

    судя по некоторым комментам автор давно не чистил свой блог от спама…

    а что касается поста про PHP, то подобных примеров публиковать КАТЕГОРИЧЕСКИ нельзя
    новички будут учиться по таким примерам, и будут думать что это правильно…

    возражения «все работает и результат верен» не принимаются — таким же принципом можно сравнивать секс с онанизмом.

    В вашем примере 5 строк с explode можно заменить одним регулярным выражением.
    это изящнее, быстрее работает и убережет от ошибки (например если пользователь при вводе даты введет не двоеточие а точку с запятой)

    кстати я тоже пишу про PHP и если интересно, то меняюсь постовыми
    http://blog.webamator.ru/seo/337/perekrestnyj-obmen-postovymi.html

  9. Антон от 23 апреля 2011 16:48

    А как можно сделать так, чтобы даты не в коде этом вписывать, а передавать в переменной в этот код.

  10. Николай от 4 мая 2011 10:41

    измените на это кусок. а то глючит! оно путает дни с годами…
    $timestamp2 = (mktime($arrtime2[0], $arrtime2[1], $arrtime2[2], $arrdate2[1], $arrdate2[2], $arrdate2[0]));
    $timestamp1 = (mktime($arrtime1[0], $arrtime1[1], $arrtime1[2], $arrdate1[1], $arrdate1[2], $arrdate1[0]));

  11. Сергей от 18 апреля 2012 2:32

    Я в шоке! Вообще-то есть функция strtotime() для этого

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




*