Дата и время в PHP
В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.
PHP-функции для работы с датой и временем
PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:
time() Возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX). getdate( ) Считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:
seconds | Секунды (0-59) |
minutes | Минуты (0-59) |
hours | Часы (0-23) |
mday | День месяца (1-31) |
wday | День недели (0-6), начиная с воскресенья |
mon | Месяц (1-12) |
year | Год |
yday | День года (0-365) |
weekday | Название дня недели (например, Friday) |
month | Название месяца (например, January) |
0 | Абсолютное время |
Пример 1
$d = getdate(); // использовано текущее время foreach ( $d as $key => $val ) echo "$key = $val
"; echo "
Сегодня: $d[mday].$d[mon].$d[year]";
seconds = 11
minutes = 49
hours = 3
mday = 19
wday = 3
mon = 7
year = 2023
yday = 199
weekday = Wednesday
month = July
0 = 1689727751
Сегодня: 19.7.2023
date() Форматирование даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. Строка формата может содержать следующие коды:
a | Включено обозначение «am» или «pm» |
A | Включено обозначение «AM» или «PM» |
d | День месяца (01-31) |
D | Сокращенное название дня недели (три буквы) |
F | Полное название месяца |
g | Часы (12-часовой формат без ведущих нулей) |
G | Часы (24-часовой формат без ведущих нулей) |
h | Часы (12-часовой формат) |
H | Часы (24-часовой формат) |
i | Минуты (00-59) |
j | День месяца без ведущих нулей (1-31) |
l | Полное название дня недели |
L | Признак високосного года (0 или 1) |
m | Месяц (01-12) |
M | Сокращенное название месяца (три буквы) |
n | Месяц (1-12) |
s | Секунды (00-59) |
t | Количество дней в данном месяце (от 28 до 31) |
U | Абсолютное время |
w | Номер дня недели (0 — воскресенье, 6 — суббота) |
y | Год (два разряда) |
Y | Год (четыре разряда) |
z | День года (0-365) |
Z | Смещение часового пояса в секундах (от -43200 до 43200) |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту «\». Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку «n», то надо ввести «\\n», поскольку «\n» является символом новой строки.
Пример 2
mktime() Возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate() . Принимает до шести целочисленных аргументов в следующем порядке:
часы
минуты
секунды
месяц
день месяца
год
Пример 3
date( "j F Y, \a\\t g.i a, l", mktime( 13, 30, 0, 1, 22, 1971 ) );
22 January 1971, at 1.30 pm, Friday
checkdate() Проверка правильности даты. Аргументы: месяц, день, год. Возвращает true , если дата правильная, т.е.
месяц — целое число от 1 до 12;
день — целое число, не превышающее общего количества дней в данном месяце. При этом високосные годы обрабатываются корректно;
год — целое число от 1 до 32767.
if ( !checkdate( $month, 1, $year ) )
Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.
strftime() Формирование локальной даты и времени.
Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции setlocate() . Строка формата может содержать следующие коды:
%a | Сокращенное название дня недели |
%A | Полное название дня недели |
%b | Сокращенное название месяца |
%B | Полное название месяца |
%c | Предпочтительный формат даты и времени |
%C | Номер века |
%d | День месяца (1-31) |
%D | То же, что и %m/%d/%y |
%e | Месяц (1-12) |
%h | То же, что и %b |
%H | Часы (24-часовой формат) |
%I | Часы (12-часовой формат) |
%j | День года (0-365) |
%m | Месяц (1-12) |
%M | Минуты |
%n | Символ новой строки |
%p | Включено обозначение «am» или «pm» |
%r | Время с использованием a.m./p.m.-нотации |
%R | Время в 24-часовом формате |
%S | Секунды (00-59) |
%t | Символ табуляции |
%T | То же, что и %H:%M:%S |
%u | Номер дня недели (1 — понедельник, 7 — воскресенье) |
%U | Номер недели. Отсчет начинается с первого воскресенья года |
%V | Номер недели по ISO 8601:1988. Первая неделя должна иметь не менее четырех дней, а понедельник считается первым днем |
%W | Номер недели. Отсчет начинается с первого понедельника года |
%w | Номер дня недели (0 — воскресенье, 6 — суббота) |
%x | Предпочтительный формат даты без времени |
%X | Предпочтительный формат времени без даты |
%y | Год (два разряда) |
%Y | Год (четыре разряда) |
%Z | Часовой пояс (имя или сокращение) |
%% | Символ «%» |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.
Пример 4
echo strftime("%A %d %B %Y %H:%M
"); //error_reporting(E_ALL & ~E_WARNING); //setlocale(LC_ALL,''); echo strftime("Сегодня %A %d %B %Y %X
"); echo strftime("%Z
");
Wednesday 19 July 2023 03:49
Сегодня Wednesday 19 July 2023 03:49:11
MSK
Еще примеры:
PHP занятие 6. Функции даты и времени
Функции даты и времени в PHP позволяют получить дату и время с сервера, с которого запускается сценарий.
Рассмотрим основные функции даты и функции времени php.
Функция date в php
Данная функция возвращает строку в виде даты и/или времени в указанном формате ( $format ). Шаблон формата указывается в качестве аргумента функции.
Рассмотрим варианты символов, которые распознаются в параметре формат:
Символ в параметре format | Описание | Пример возвращаемого значения |
---|---|---|
Функция даты php | ||
День | ||
d | День месяца: две цифры с первым нулём | от 01 до 31 |
D | День недели в словесном представлении, 3 символа | от Mon до Sun |
j | День месяца без первого нуля | от 1 до 31 |
l (строчная «L») | Полное словесное название дня недели | от Sunday до Saturday |
N | Порядковый номер дня недели | от 1 (понедельник) до 7 (воскресенье) |
S | Сокращение порядкового числительного дня месяца: два символа | st, nd, rd или th. Применяется вместе с j |
w | Порядковый номер дня недели | от 0 (воскресенье) до 6 (суббота) |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Неделя | ||
W | Порядковый номер недели года: недели начинаются с понедельника | 33 (33-я неделя года) |
Месяц | ||
F | Полное словесное название месяца, например May | от January до December |
m | Порядковый номер месяца с первым нулём | от 01 до 12 |
M | Сокращенное словесное название месяца: три символа | от Jan до Dec |
n | Порядковый номер месяца без первого нуля | от 1 до 12 |
t | Количество дней в указанном месяце | от 28 до 31 |
Год | ||
L | Указывает на високосный год | 1, если год високосный, иначе 0. |
o | Номер года | 1999 или 2003 |
Y | Порядковый номер года: четыре цифры | 1998, 2008 |
y | Номер года: две цифры | 98, 08 |
Функции времени php | ||
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 | Микросекунды | Например, 654321 |
v | Миллисекунды | Например, 654 |
Временная зона | ||
e | Код шкалы временной зоны | Например, UTC, GMT |
I (заглавная i) | Признак летнего времени | 1, если дата соответствует летнему времени, 0 в противном случае. |
Полная дата/время | ||
c | Дата в формате, указанном в примере | 2006-05-12T15:19:21+00:00 |
r | Дата в формате, указанном в примере | Например: Thu, 23 Dec 2010 18:05:07 +0200 |
U | Количество секунд, прошедших с начала Эпохи Unix (с 1 января 1970 00:00:00 GMT) | — |
// выведет день недели в формате: Saturday echo date("l"); // выведет дату в формате 2017-01-28 echo date('Y-m-d'); // выведет дату и время в формате: Saturday 8th of August 2016 06:13:44 PM echo date('l jS \of F Y h:i:s A');
// выведет день недели в формате: Saturday echo date(«l»); // выведет дату в формате 2017-01-28 echo date(‘Y-m-d’); // выведет дату и время в формате: Saturday 8th of August 2016 06:13:44 PM echo date(‘l jS \of F Y h:i:s A’);
Функция time и mktime в php
time — возвращает количество секунд, прошедших с начала Эпохи Unix (c 1 января 1970 00:00:00 GMT) до текущего времени
Функция не предназначена для вывода результата в виде даты или времени, а используется совместно с другими функциями.
Пример использования функции в «чистом виде»:
$now = time(); // метка текущей даты echo $now; // выведет что-то типа 1485618140 $nextWeek = time() + (7 * 24 * 60 * 60); // 7 дней; 24 часа; 60 минут; 60 секунд echo $nextWeek; // выведет что-то типа 1486222940
$now = time(); // метка текущей даты echo $now; // выведет что-то типа 1485618140 $nextWeek = time() + (7 * 24 * 60 * 60); // 7 дней; 24 часа; 60 минут; 60 секунд echo $nextWeek; // выведет что-то типа 1486222940
Функция используется совместно с функцией date():
Пример: вывести текущую дату (два способа) и затем дату, которая должна быть ровно через неделю
$now = time(); $nextWeek = time() + (7 * 24 * 60 * 60); // Сейчас: 2017-01-28 echo 'Сейчас: '. date('Y-m-d') ."\n"; // Сейчас: 2017-01-28 echo 'Сейчас: '. date('Y-m-d', $now) ."\n"; // Следующая неделя: 2017-02-04 echo 'Следующая неделя: '. date('Y-m-d', $nextWeek) ."\n";
$now = time(); $nextWeek = time() + (7 * 24 * 60 * 60); // Сейчас: 2017-01-28 echo ‘Сейчас: ‘. date(‘Y-m-d’) .»\n»; // Сейчас: 2017-01-28 echo ‘Сейчас: ‘. date(‘Y-m-d’, $now) .»\n»; // Следующая неделя: 2017-02-04 echo ‘Следующая неделя: ‘. date(‘Y-m-d’, $nextWeek) .»\n»;
Функция используется совместно с функцией mktime:
mktime — возвращает метку времени Unix для указанной даты
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
Аргументы могут быть опущены в порядке справа налево.
Рис. 6.1. Использование функции mktime и date
Пример: вывести на экран текущие полную дату и время, затем дату и время завтрашнего дня, следующего месяца того же дня и той же даты прошлого года
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//Вывод текущей даты и времени echo date("r"); //Sat, 28 Jan 2017 19:58:45 +0400 // создаем метку для "завтра" $tomorrow = mktime(0,0,0,date("m"),date("d")+1, date("Y")); echo date("r", $tomorrow); // Sun, 29 Jan 2017 00:00:00 +0400 // создаем метку для "следующий месяц" $nextmonth = mktime(0,0,0,date("m")+1,date("d"), date("Y")); echo date("r", $nextmonth ); //Tue, 28 Feb 2017 00:00:00 +0400 // создаем метку для "прошлый год" $lastyear= mktime(0,0,0,date("m")+1,date("d"), date("Y")-1); echo date("r", $lastyear); //Sun, 28 Feb 2016 00:00:00 +0400
//Вывод текущей даты и времени echo date(«r»); //Sat, 28 Jan 2017 19:58:45 +0400 // создаем метку для «завтра» $tomorrow = mktime(0,0,0,date(«m»),date(«d»)+1, date(«Y»)); echo date(«r», $tomorrow); // Sun, 29 Jan 2017 00:00:00 +0400 // создаем метку для «следующий месяц» $nextmonth = mktime(0,0,0,date(«m»)+1,date(«d»), date(«Y»)); echo date(«r», $nextmonth ); //Tue, 28 Feb 2017 00:00:00 +0400 // создаем метку для «прошлый год» $lastyear= mktime(0,0,0,date(«m»)+1,date(«d»), date(«Y»)-1); echo date(«r», $lastyear); //Sun, 28 Feb 2016 00:00:00 +0400
- Создайте строковую переменную now
- Создайте строковую переменную birthday
- Присвойте переменной now значение метки времени актуальной даты (сегодня)
- Присвойте переменной birthday значение метки времени Вашего дня рождения
- Выведите фразу «До моего дня рождения осталось «
- Выведите количество секунд, оставшееся до Вашего дня рождения
- Закончите фразу » секунд»
Дополните код: