Вывод даты и времени из unix php. Используем функцию date() в PHP

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

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

В PHP работа с датой чаще всего сталкивается с UNIX TIMESTAMP. Здесь время хранится целым числом. Исчисление времени начинается с 1 января 1970 года. Поэтому, например, дата и время 11.12.2014 19:40:00, будет представлено числом 1418316000. Эта цифра показывает, сколько секунд прошло с нулевой даты 1 января 1970 года, названой Эпохой Unix.

Пример php-страницы, предоставляющий возможности преобразования данных представлен на сайте в разделе программ программой "Преобразование формата даты и времени" . Здесь можно сформировать нужную дату в формат UNIX TIMESTAMP, а так же привести этот формат в стандартный, понятный человеку вид.

Получение текущего времени и даты в PHP

Для получения текущего времени сервера используется функция

int time(void)

которая как раз вернет значение в формате unix timestamp.

echo time(); // вывод текущего времени в формате unix timestamp

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

Преобразование формата даты и времени в PHP

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

array getdate()

Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:

Полученный массив, позволяет вывести значения нужном виде:

$date = 1418372345;
$date_mas = getdate($date);
echo $date_mas["mday" ] . " . " . $date_mas["mon" ] . " . " . $date_mas["year" ]; // 12.12.2014


Так же для преобразования формата даты и времени можно воспользоваться функцией:

string date(string $template [, int $unix_timestamp])

Она предназначена для получения текущей даты unix timestamp в нужном формате. Строковый параметр $template определяет формат вывода. Параметром $unix_timestamp можно задать, с каким значением времени производится работа. Он необязательный, поэтому, если его не указать, будет использоваться текущая дата и время.

Формат задается следующими значениями:

a "до" и "после" полудня: "am" или "pm"
A "до" и "после" полудня заглавными буквами: "AM" или "PM"
d день месяца 2 цифрами (если меньше 10, на первом месте ноль) (от 01 до 31)
D день недели 3 буквами. Например, "Mon" (понедельник)
j день месяца, 1-2 цифры без начальных нулей (от 1 до 31)
F название месяца. Например, "January"
h час, 12-часовой формат (от 01 до 12)
H час, 24-часовой формат (от 00 до 23)
g час, 12-часовой формат без нулей (от 1 до 12)
G час, 24-часовой формат без нулей (от 0 до 23)
i минуты (от 00 до 59)
I (заглавная i) 1, если действует переход на летнее время, иначе 0
L 1, если год високосный, или 0 если не високосный
B время в формате Интернет-времени (альтернативной системы отсчета времени суток) (от 000 до 999)
T временная зона компьютера. Например, MDT
l (строчная L) день недели. Например, "Monday"
m месяц, две цифры с нулями (от 01 до 12)
n месяц, одна-две цифры без нулей (от 1 до 12)
M сокращенное наименование месяца. Например, "Jan"
t число дней в указанном месяце (от 28 до 31)
s секунды (от 0 до 59)
S англоязычный порядковый суффикс числа из двух букв ("st", "nd", "rd" или "th")
U целое число секунд, прошедших с момента начала эпохи UNIX
y год, цифровой, 2 цифры (14)
Y год, цифровой, 4 цифры (2014)
z порядковое число дня в году (от 0 до 365)
Z смешение временной зоны в секундах (от -43200 до 43200)
N порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) в соответствии со стандартом ISO-8601, (добавлен в версии PHP 5.1.0)
w порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
W порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0)
o номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0)
e код шкалы временной зоны. Например: UTC, GMT, Atlantic/Azores (добавлен в версии PHP 5.1.0)
O разница с временем по Гринвичу, в часах. Например: +0200
P разница с временем по Гринвичу с двоеточием между часами и минутами. Например: +02:00 (добавлено в версии PHP 5.1.3)
c дата в формате стандарта ISO 8601. Например, 2014-12-12T15:19:21+00:00 (добавлено в PHP 5)
r дата в формате » RFC 2822. Например: Thu, 21 Dec 2000 16:01:07 +0200
U количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT)

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

$date = 1418372345; // исходное дата и время 12.12.2014 11:19:05

echo date("d.m.Y" , $date); // 12.12.2014 (дата)
echo date("H:i:s" , $date); // 11:19:05 (время)
echo date("H:i" , $date); // 11:19 (время)
echo date("t" , $date); // 31 (число дней в месяце)
echo date("z" , $date); // 345 (порядковый номер дня в году)
echo date("l dS \of F Y h:i:s A" , $date); // Friday 12th of December 2014 11:19:05 AM

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

echo date("Сегодня z-й день Y-го года" , $date); // Сегодня 345-й день 2014-го года

Преобразование даты и времени в формат timestamp

Для обратного преобразования даты из стандартного формата в числовое значение timestamp применяется функция:

int mktime(]]]]]])

Функция mktime() возвращает значение времени Unix, соответствующую дате и времени, заданным аргументами. Например:

$my_date = mktime (10, 30, 0, 12, 12, 2014);

Следует внимательно относится к порядку аргументов функции: часы, минуты, секунды, месяц, день, год.

Кроме простого формирования значения даты в timestamp, функцию mktime() можно использовать для арифметически вычисления с датами. Для этого просто можно ввести необходимые аргументы. Например, если указать 14 месяц, то в итоговом значении, месяц будет 2-й, а значение года увеличится на единицу:

$my_day = 12;
$my_month = 12;
$my_year = 2014;

$new_date = mktime(0, 0, 0, $my_month + 5, $my_day, $my_year);

echo date("d.m.Y" , $new_date); // 12.05.2015 (дата)

Аналогично можно поступать и с другими параметрами.

Проверка корректности даты в PHP

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

bool checkdate(int month, int day, int year)

Возвращает true если дата, заданная аргументами, является правильной; иначе возвращает false. Дата считается правильной, если:

Год в диапазоне от 1 до 32767;

Месяц в диапазоне от 1 до 12;

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

Пример проверки даты:

$my_day = 32;
$my_month = 12;
$my_year = 2014;

if (!checkdate($my_month, $my_day, $my_year))
echo "Ошибка: дата указана некорректно" ;

Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.

Замечание: Для получения метки времени из строкового представления даты можно использовать функцию strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (напрмер, функция MySQL UNIX_TIMESTAMP).


$tomorrow = mktime (0 , 0 , 0 , date ("m" ) , date ("d" )+ 1 , date ("Y" ));
$lastmonth = mktime (0 , 0 , 0 , date ("m" )- 1 , date ("d" ), date ("Y" ));
$nextyear = mktime (0 , 0 , 0 , date ("m" ), date ("d" ), date ("Y" )+ 1 );
?>

Замечание: Этот метод более надежен, чем вычитание и прибавление секунд к метке времени, так как mktime() учитывает любые неоднозначности в датах (переход на летнее/зимнее время и др.).

Приведем еще несколько примеров использования функции date() . Помните, что следует экранировать все символы, которые вы хотите видеть в результате работы функции без изменений. Это относится и к символам, которые в текущей версии PHP не распознаются как специальные, так как этим символам может быть назначено значение в следующих версиях. Используйте одинарные кавычки для предотвращения преобразования \n в перевод строки.


Пример 4. Форматирование с использованием date()

Очевидно, что очень часто программистам приходится работать с датой и временем . Самый простой пример - это дата и время отправки сообщения на форуме. И, разумеется, такие вещи могут реализоваться на PHP , тем более, что возможностей по работе с датой и временем в PHP очень много.

Базовая функция, связанная с датой и временем в PHP , - это функция time() , которая возвращает количество секунд, прошедших с полуночи 01.01.1970 (зарождение эпохи Unix ):

echo time();
?>

Запустив данный скрипт, Вы узнаете, сколько секунд прошло с полуночи 01.01.1970 до момента вызова функции time() в Вашем скрипте.

Разумеется, помимо этой базовой функции, которая присутствует во всех языках программирования, где можно работать с датой и временем (по крайней мере, среди тех, которые я знаю), существует и другая функция, которая называется getdate() :

$datetime = getdate();
foreach ($datetime as $k=>$v)
echo "$k - $v
";
?>

Запустив данный скрипт, Вы увидите набор ключей в массиве и их соответствующих значений (заодно, повторили конструкцию foreach ). Думаю, что теперь для Вас не составит труда узнать любые данные, связанные с датой и временем . Например, чтобы вывести текущее время, необходимо написать следующий код:

$datetime = getdate();
echo $datetime["hours"].":".$datetime["minutes"].":".$datetime["seconds"];
?>

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

$datetime = getdate(152353232);
echo $datetime["year"];
?>

В результате, Вы увидите 1974-ый год.

Также существует функция date() . Я рекомендую посмотреть описание по ней в справочнике, так как данная функция принимает весьма сложный параметр, который задаёт формат вывода даты. Элементов форматирования чуть больше 30-ти штук. И в примере ниже я приведу несколько из них, а остальные посмотрите в справочнике, потому что их запоминать не нужно, но ознакомиться с ними крайне желательно. А принцип их использования знать обязательно, и о нём следующий пример:

echo date("Сегодня d.m.Y H:i:s");
?>

В результате, Вы увидите что-то наподобие этого: "Сегодня 15.11.2010 21:44:24 ". Также у функции date() есть ещё второй необязательный параметр, задающий timestamp , как раз та величина, равная количеству секунд, прошедших с полуночи 01.01.1970 . Пример использования второго параметра:

echo date("Когда-то было d.m.Y H:i:s", 5393235329);
?>

Также существует функция gmdate() , которая является полным аналогом функции date() , но функция gmdate() показывает время не по часовому поясу сервера, на котором работает скрипт, а по Гринвичу . Очевидно, что с помощью этой функции надо сохранять всю информацию о дате и времени, которую видит пользователь, а при выводе нужно подстраиваться под часовой пояс каждого пользователя (в идеале, конечно):

echo gmdate("Сейчас на Гринвиче D M j H:i:s T Y")
?>

В результате, Вы увидите примерно следующее: "Mon Nov 15 18:52:45 GMT 2010 ". Разумеется, у Вас будет выведена уже другая дата, но в аналогичном формате. Также я настоятельно рекомендую залезть в справочник и просто ознакомиться с другими элементами даты и времени в PHP (я привёл только треть), так как функции date() и gmdate() - это самый простой и самый быстрый способ получить дату и время в практически любом формате.

В этом уроке мы рассмотрим функцию date().

PHP функция date() используется для форматирования времени и/или даты.

Синтаксис

Синтаксис вызова функции:

Date($format, $timestamp);

$format — шаблон по которому будет получена дата, $timestamp — представляет собой метку времени, по умолчанию равную текущему локальному времени, если timestamp не указан. Другими словами, значение по умолчанию равно результату функции time(). В следующей таблице подробно рассмотрен синтаксис параметра format

В параметре format распознаются следующие символы
Символ в строке format Описание Пример возвращаемого значения
День
d День месяца, 2 цифры с ведущим нулём от 01 до 31
D Текствое представление дня недели, 3 символа от Mon до Sun
j День месяца без ведущего нуля от 1 до 31
l (строчная ‘L’) Полное наименование дня недели от Sunday доSaturday
N Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) от 1 (понедельник) до7 (воскресенье)
S Английский суффикс порядкового числительного дня месяца, 2 символа st , nd , rd или th . Применяется совместно с j
w Порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Неделя
W Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) Например: 42 (42-я неделя года)
Месяц
F Полное наименование месяца, например January или March от January доDecember
m Порядковый номер месяца с ведущим нулём от 01 до 12
M Сокращенное наименование месяца, 3 символа от Jan до Dec
n Порядковый номер месяца без ведущего нуля от 1 до 12
t Количество дней в указанном месяце от 28 до 31
Год
L Признак високосного года 1 , если год високосный, иначе 0 .
o Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y , кроме случая, когда номер недели ISO (W ) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) Примеры: 1999 или 2003
Y Порядковый номер года, 4 цифры Примеры: 1999 ,2003
y Номер года, 2 цифры Примеры: 99 , 03
Время
a Ante meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в формате Интернет-времени (альтернативной системы отсчета времени суток) от 000 до 999
g Часы в 12-часовом формате без ведущего нуля от 1 до 12
G Часы в 24-часовом формате без ведущего нуля от 0 до 23
h Часы в 12-часовом формате с ведущим нулём от 01 до 12
H Часы в 24-часовом формате с ведущим нулём от 00 до 23
i Минуты с ведущим нулём от 00 до 59
s Секунды с ведущим нулём от 00 до 59
u Микросекунды (добавлено в версии PHP 5.2.2) Например: 654321
Временная зона
e Код шкалы временной зоны(добавлен в версии PHP 5.1.0) Примеры: UTC ,GMT ,Atlantic/Azores
I (заглавная i) Признак летнего времени 1 , если дата соответствует летнему времени,0 в противном случае.
O Разница с временем по Гринвичу, в часах Например: +0200
P Разница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5.1.3) Например: +02:00
T Аббревиатура временной зоны Примеры: EST ,MDT
Z Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. от -43200 до50400
Полная дата/время
c Дата в формате стандарта ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
r Дата в формате » RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) Смотрите такжеtime()

Рассмотрим примеры. Следующий код:

"; echo date("Y.m.d") . "
"; echo date("Y-m-d"); ?>

2009/05/11 2009.05.11 2009-05-11

PHP Date() — Добавляем метку времени

Функция mktime() возвращает Unix метку времени для указанной даты. Эта метка времени содержит количество секунд начиная с Январь 1 1970 00:00:00 GMT до указанной даты. Синтаксис для mktime():

Mktime(hour,minute,second,month,day,year,is_dst);

Для того чтобы заглянуть на один день в будущее, нам надо просто добавить 1 к параметру day функции mktime(). Пример:

Данный код выведет:

Date(format, timestamp)

Функция date возвращает строку, отформатированную в соответствии с заданной строкой формата, используя данную целочисленную временную метку или текущее время, если временная метка не указана. Другими словами, timestamp является необязательной и по умолчанию имеет значение time().

И параметры -

Формат - Обязательно. Определяет формат отметки времени

timestamp - (Необязательно) Указывает временную метку. По умолчанию текущая дата и время

Как получить простое свидание

Обязательный параметр формата функции date() указывает, как форматировать date (or time) .

Вот некоторые символы, которые обычно используются для дат:

  1. d - представляет день месяца (с 01 по 31)
  2. m - представляет месяц (от 01 до 12)
  3. Y - представляет год (из четырех цифр)
  4. l (нижний регистр "L") - представляет день недели

Другие символы, такие как "/", ".", or "-" также могут быть вставлены между символами для добавления дополнительного форматирования.

Пример ниже форматирует сегодняшнюю дату тремя различными способами:

"; echo "Today is " . date("Y.m.d") . "
"; echo "Today is " . date("Y-m-d") . "
"; echo "Today is " . date("l"); ?>

Несколько полезных ссылок

  • gmdate() - форматирует дату/время по Гринвичу /UTC
  • idate() - форматирует местное время/дату как целое число
  • getdate() - получает информацию о дате/времени
  • getlastmod() - Получает время последней модификации страницы
  • mktime() - получает метку времени Unix для даты
  • strftime() - форматирует местное время/дату в соответствии с настройками локали