Уважаемые читатели сайта Ajaxs.ru

Очень рад что вы зашли на мой сайт. Надеюсь, Вы сможете найти здесь для себя полезную информацию. Зарегистрировавшись на сайте вы получаете ряд преимуществ:
1. При комментировании Вам не нужно вводить имя и капчу с картинки
2. Вы можете получать уведомления на Email к интерисующим вас урокам
3. Вы можете редактировать свои комментарии

Вход на сайт


Забыли пароль



Восстановление пароля


Войти на сайт

Зарегистрироваться

Главная / Уроки по PHP / Просмотр урока

     

Создание сайтов


Вам нужен небольшой сайт или просто хотите доработать уже существующий? | Подробнее

Учимся работать с датами в PHP

Здравствуйте, сегодня мы научимся работать с датами в PHP. Наверное, все языки программирования имеют свои функции  роботы с датами и временем. На PHP  также есть функция, которая позволит зафиксировать время или дату на вашем сайте, а затем, например записать в базу данных или еще что-нибудь.

Синтаксис в функции  для работы с датами в php имеет вид: date(" "). Но чтобы определить значение даты, в каком либо виде, например месяц или год существует таблица  символов, с помощью которых вы сможете  вывести время в любом удобном для вас формате. Ниже приведена таблица разных символом, используемых функцией date(" ") и их значение.  Для экономии вашего времени здесь приведены только необходимые и часто используемые символы.

Символ

Описание

Пример возвращаемого значения

a

Ante meridiem или Post meridiem в нижнем регистре

am или pm

A

Ante meridiem или Post meridiem в верхнем регистре

AM или PM

d

День месяца, 2 цифры с ведущими нулями

от 01 до 31

D

Сокращенное наименование дня недели, 3 символа

от Mon до Sun

F

Полное наименование месяца, например January или March

от January до December

g

Часы в 12-часовом формате без ведущих нулей

От 1 до 12

G

Часы в 24-часовом формате без ведущих нулей

От 0 до 23

h

Часы в 12-часовом формате с ведущими нулями

От 01 до 12

H

Часы в 24-часовом формате с ведущими нулями

От 00 до 23

i

Минуты с ведущими нулями

00 to 59

I

Признак летнего времени

1, если дата соответствует летнему времени, иначе 0.

j

День месяца без ведущих нулей

От 1 до 31

l

Полное наименование дня недели

От Sunday до Saturday

L

Признак високосного года

1, если год високосный, иначе 0.

m

Порядковый номер месяца с ведущими нулями

От 01 до 12

M

Сокращенное наименование месяца, 3 символа

От Jan до Dec

n

Порядковый номер месяца без ведущих нулей

От 1 до 12

O

Разница с временем по Гринвичу в часах

Например: +0200

s

Секунды с ведущими нулями

От 00 до 59

t

Количество дней в месяце

От 28 до 31

w

Порядковый номер дня недели

От 0 (воскресенье) до 6 (суббота)

W

Порядковый номер недели года по ISO-8601, первый день недели - понедельник

Например: 42 (42-я неделя года)

Y

Порядковый номер года, 4 цифры

Примеры: 1999, 2003

y

Номер года, 2 цифры

Примеры: 99, 03

z

Порядковый номер дня в году (нумерация с 0)

От 0 до 365

Теперь рассмотрим на практике, как это все делается. Для того чтобы вывести время достаточно записать в функцию даты символы из таблицы, а также разделители и т.п.  Естественно, функцию date запросто можно присвоить переменной. Но следует помнить, что если нужно показать ещё  слово перед или после даты, то нужно следить за тем чтобы вставляемые символы не совпадали с символами из таблицы. Но если без этого не обойтись, то нужно экранировать (\) каждый символ. Например, если нужно вывести : DAY:  текущий день.

<?php
$date = date("\D\A\Y: d");
echo $date;
?>

Перед символами, которые не входят в таблицу, можно не ставить косую черту, например, тире, запятые, точки и т.д. Чтобы таких проблем не возникало, сформируйте сначала только дату, а потом выведите в строке, где текст будет абсолютно не иметь никакого отношения к этой дате. Например:

<?php
$date = date("d");
echo "DAY: $date";
//или так
$date = "DAY: ".date("d");
?>

Иногда может потребоваться узнать время в другой точке Земли для этого нужно привязать дату к часовому поясу. По-умолчанию используется часовой пояс Гринвича. Изменить его, можно с помощью функции date_default_timezone_set("") и в качестве параметра указать часовой пояс. Например, Europe/Moskow. Так же эта функция может быть полезна для тех, у кого сайты располагаются на зарубежных хостингах. В исходных файлах есть текстовый документ, содержащий все часовые пояса.

Теперь немного поговорим о том, как сосчитать, сколько прошло времени от какой-нибудь даты и наоборот. Отсчёт времени можно реализовать с помощью функции mktime(). Синтаксис этой функции таков:

mktime(часы, минуты, секунды, месяц, день, год);

Даная функции выводит количество секунд прошедшее с начала эпохи UNIX (1 января 1970, 00:00:00) до заданной даты. Также вы можете узнать, сколько прошло секунд до текущего времени с начала эпохи UNIX с помощью функции time(). В данной функции не нужно ничего ставить в середине. Например, нужно подсчитать время к 15:33:59 08.01.2010:

<?php
$time = mktime(15,33,59,01,08,2010);
echo $time;
?>

Число, которое выведется, будет равно 1262273639. Для отсчёта разнице между двумя датами нужно прописывать два раза функцию mktime(), но указывать в них разное время и дату, а потом только отнимать одного от другого. Например, нам нужно узнать, сколько секунд прошло от 15:33:59 08.01.2010 до 15:36:59 08.01.2010.

<?php
$time = mktime(15,33,59,01,08,2010);
$time1 = mktime(15,36,59,01,08,2010);
$time = $time1-$time;
echo $time;// 180
?>

Этот скрипт выведет 180, это значит от 15:33:59 08.01.2010 к 15:36:59 08.01.2010 прошло 180 секунд, то есть 3 минуты. Но не всегда, если вы будете переводить секунды в минуты или дни, то переведенное число будет целым, поэтому данное число нужно округлять к меньшему. Например, 1.59 часа к 1, потому что если даже число будет иметь такое значение, то это не будет значить что прошло 2 часа, а только один, хотя по идее такое число при округлении превратилось бы в 2. Округление к меньшему происходит с помощью функции floor(число).

Теперь рассмотрим такой пример,  нам нужно удалять всех зарегистрированных пользователей из базы, которые не заходили на сайт в течение 14 дней. В базе у нас храниться даты последнего посещения сайта каждым пользователем, допустим в таком виде 14.01.2011 17:58. Осуществить это можно так:

date_default_timezone_set("Europe/Moskow");
$timestamp2mktime(date("H"), date("i"), date("s"), date("d"), date("m"), date("Y"));
$query = mysql_query("SELECT name,date FROM имя_таблицы", $connect);
$visit = mysql_fetch_array($query);
do{
      $date = $visit['date'];
      $arr1 = explode(" ", $date);
      $arrdate1 = explode(".", $arr1[0]);
      $arrtime1 = explode(":", $arr1[1]);
      $timestamp1 = (mktime($arrtime1[0], $arrtime1[1], $arrtime1[2], $arrdate1[1],  $arrdate1[0],  $arrdate1[2]));
      $difference = floor(($timestamp2 - $timestamp1)/86400);
      if ($difference >= 14){
          $delUser = mysql_query("DELETE FROM имя_таблицы WHERE date='$date' and name='$visit[name]'",$connect);
          if($delUser){
             echo "Пользователь: ".$visit['name']." удален<br>";
          }
      }
}
while ($visit = mysql_fetch_array($query)); 

Сначала мы определяем наш часовой пояс и сразу же вычисляем количество секунд прошедшее с 1 января 1970, 00:00:00 до настоящего времени. Затем из таблицы юзеров мы поочередно вытаскиваем имя пользователя и дату последнего посещения. Посколько дата у нас хранится в формате 14.01.2011 17:58, а нам нужно знать по отдельности часы, минуты, секунды, число, месяц и год, то мы с помощью функция explode разбиваем строку на части и заносим в массив. То есть, если мы возьмем дату, приведенную в примере и применим $arr1 = explode(" ", $date); то в массиве у нас будет храниться два значения ($arr1[0] == 14.01.2011 и $arr1[1] == 17:58). Таким образом, мы получаем нужные нам значения и применяем функцию mktime(), определяя количество секунд с 1 января 1970, 00:00:00 до последнего посещения. Теперь мы вычитаем эти значения, результат делим на 86400 (секунд в одних сутках) и округляем до целого числа. Затем проверяем если оно больше или равно 14, то удаляем такого пользователя.

Теперь рассмотрим способ который будет выводить дату в формате привычном для нас виде, т.е. не 14-01-2011, а, например, 14 Января 2011.

<?php
$date = date("d-m-Y");
$month = array("-01-","-02-","-03-","-04-","-05-","-06-","-07-","-08-","-09-","-10-",
"-11-","-12-"
);
$ds = array(" Января "," Февраля "," Марта "," Апреля "," Мая "," Июня "," Июля "," Августа "," Сентября "," Октября "," Ноября "," Декабря ");
$newdate = str_replace($month, $ds, $date);
echo "Сегодня: $newdate";
?>

Здесь мы просто заменяем числовое значение месяца на буквенное, в результате получим более удобную для восприятия форму записи даты.

Ну, думаю на этом все.

Автор: Евгений Бочкарев и Кушнир Александр Урок добавлен: 27 Января 2011 в 20:41 Просмотров: 20592

Условия копирования материалов сайта

Все комментарии
#-1 сергей 09-11-2011 в 22:28
$date = date("\D\A\Y: d");
echo $date;
выдает следующее:Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Dubai' for '4.0/no DST' instead in F:\WebServers\home\basicphp.loc\www\~wrem.php on line 15 Call Stack: 0.0030 322200 1. {main}() F:\WebServers\home\basicphp.loc\www\~wrem.php:0 0.0030 322288 2. date() F:\WebServers\home\basicphp.loc\www\~wrem.php:15 DAY: 09
#0 Руслан 23-03-2012 в 15:40
А не подскажите как сделать чтобы время само шло без обновлений?!
#1 Евгений 23-03-2012 в 19:57
Это уже надо писать на javascript и такие скрипты уже есть готовые нужно просто поискать
#2 Михаил 14-04-2012 в 23:52
Сергей, там же понятно что пишет - что не может поставить время по текущему часовому поясу:
You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Dubai' for '4.0/no DST' instead in F:\WebServers\home\basicphp.loc\www\~wrem.php on line 15
#3 Михаил 14-04-2012 в 23:52
ыы надо было на дату посмотреть))) ему по любому это еще актуально xD
#4 Карен 30-11-2013 в 15:11
Спасибо, за сайт кратко и понятно, весь интернет обшарил наконец нашел. Так держать!!!
#5 Сергей 29-08-2014 в 21:39
Помогите сделать так, что бы время отображалось как ВКОНТАКТЕ . Материал был опубликован минуту назад или час назад или месяц назад
#6 master_neo 29-10-2014 в 19:39
Сергей, время считайте от сейчас до времени публикации и смотрите в какой диапазон попадает.
Добавить новый комментарий

Автор:

Текст сообщения:

Если в комментарии присутствует код, пожалуйста вставляете его между тегами [code][/code]

cap

Код с картинки:


Получать уведомления о новых комментариях по Email могут только зарегистрированные пользователи.

41001346159934
R314489888859
Уроки
Для начинающих
Интересное
Файлы
Полезное
Опрос

Много ли среди программистов девушек?

Последние комментарии
Ссылки