Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.
Замечание: Для получения метки времени из строкового представления даты можно использовать функцию strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (напрмер, функция MySQL UNIX_TIMESTAMP).
|
Замечание: Этот метод более надежен, чем вычитание и прибавление секунд к метке времени, так как mktime() учитывает любые неоднозначности в датах (переход на летнее/зимнее время и др.).
Приведем еще несколько примеров использования функции date() . Помните, что следует экранировать все символы, которые вы хотите видеть в результате работы функции без изменений. Это относится и к символам, которые в текущей версии PHP не распознаются как специальные, так как этим символам может быть назначено значение в следующих версиях. Используйте одинарные кавычки для предотвращения преобразования \n в перевод строки.
Пример 4. Форматирование с использованием date() |
Иногда на страницах сайта появляется необходимость вывести не просто цифровую дату типа 23.07.2015 , а сразу русскую дату, в которой месяц будет написан русским названием . И будет она выглядеть уже вот так 23 июля 2015 .
Вы спросите: "Зачем это нужно?". А нужно это в первую очередь для лучшего визуального восприятия даты, так как первый уже стандартный для многих сайтов формат даты из одних только цифр с точками воспринимается намного хуже, чем когда день и год разделены словом-названием месяца. В этом случае можно намного быстрее понять, от какого эта дата месяца и года.
Но, что самое интересное, стандартная и довольно полезная дата-временная функция date() может выводить название месяца только на английском языке (от January до December) , то есть воспользоваться параметром F данной функции нам не подойдет.
Тут нужен другой подход, заключающийся в подстановке заместо численного значения месяца (от 1 до 12)
русского слова-обозначения этого месяца. На словах звучит сложновато, поэтому предлагаю в качестве примера вывести таким способом текущую дату
:
//список месяцев с названиями для замены $_monthsList = array(".01." => "января", ".02." => "февраля", ".03." => "марта", ".04." => "апреля", ".05." => "мая", ".06." => "июня", ".07." => "июля", ".08." => "августа", ".09." => "сентября", ".10." => "октября", ".11." => "ноября", ".12." => "декабря"); //текущая дата $currentDate = date("d.m.Y"); //переменная $currentDate теперь хранит текущую дату в формате 22.07.2015 //но так как наша задача - вывод русской даты, //заменяем число месяца на название: $_mD = date(".m."); //для замены $currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate); //теперь в переменной $currentDate хранится дата в формате 22 июня 2015
Вывести один лишь только текущий месяц
на русском языке еще проще:
$_monthsList = array("1"=>"Январь","2"=>"Февраль","3"=>"Март", "4"=>"Апрель","5"=>"Май", "6"=>"Июнь", "7"=>"Июль","8"=>"Август","9"=>"Сентябрь", "10"=>"Октябрь","11"=>"Ноябрь","12"=>"Декабрь"); $month = $_monthsList; echo $month; //выведет, например, для 7 месяца "Июль"
Ну и для того, что бы было под рукой (это же все-таки заметка), рассмотрим еще несколько реальных примеров, с которыми, обычно, и приходится сталкиваться на практике. Для удобства сделаем их подзаголовками.
//текущая дата $currentDate = "12.03.2015"; //может быть присвоена из другой переменной //список месяцев с названиями для замены $_monthsList = array(".01." => "января", ".02." => "февраля", ".03." => "марта", ".04." => "апреля", ".05." => "мая", ".06." => "июня", ".07." => "июля", ".08." => "августа", ".09." => "сентября", ".10." => "октября", ".11." => "ноября", ".12." => "декабря"); //Наша задача - вывод русской даты, //поэтому заменяем число месяца на название: $_mD = date(".m."); //для замены $currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate); //теперь в переменной $currentDate хранится дата в формате 12 марта 2015
В итоге, после небольших манипуляций, мы получаем правильную дату на выходе.
//текущая дата в формате Unix TimeStamp $_timestampDate = "1437556706"; //может быть присвоена из другой переменной //переводим в нормальную дату $currentDate = date("d.m.Y", $_timestampDate); //из 1437556706 в 22.07.2015 //список месяцев с названиями для замены $_monthsList = array(".01." => "января", ".02." => "февраля", ".03." => "марта", ".04." => "апреля", ".05." => "мая", ".06." => "июня", ".07." => "июля", ".08." => "августа", ".09." => "сентября", ".10." => "октября", ".11." => "ноября", ".12." => "декабря"); //Наша задача - вывод русской даты, //поэтому заменяем число месяца на название: $_mD = date(".m."); //для замены $currentDate = str_replace($_mD, " ".$_monthsList[$_mD]." ", $currentDate); //теперь в переменной $currentDate хранится дата в формате 22 июня 2015
В итоге мы получили нужный нам формат даты из метки времени. Все как и хотели.
Кстати, при работе с timestamp мне не плохо помогает мой же веб-инструмент . Это бесплатная штука, пользуйтесь наздоровье. Там так же можно подробнее узнать про эту самую Unix метку время. Все для Вас =)
Ну а что касается вывода даты/месяца на русском языке средствами PHP, то, думаю, тема более чем раскрыта. Изучайте, пользуйтесь и не бойтесь экспериментировать!
У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!
В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.
PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:
РЕЗУЛЬТАТ ПРИМЕРА 1:
Seconds = 21 minutes = 4 hours = 12 mday = 10 wday = 4 mon = 11 year = 2005 yday = 313 weekday = Thursday month = November 0 = 1131613461 Сегодня: 10.11.2005
a | |
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 | |
y | Год (два разряда) |
Y | Год (четыре разряда) |
z | День года (0-365) |
Z | Смещение часового пояса в секундах (от -43200 до 43200) |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту "\". Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку "n", то надо ввести "\\n", поскольку "\n" является символом новой строки.
РЕЗУЛЬТАТ ПРИМЕРА 2:
Сегодня: 10.11.05 13:03
Часы
минуты
секунды
месяц
день месяца
год
РЕЗУЛЬТАТ ПРИМЕРА 3:
Например:
If (!checkdate($month, 1, $year)) { $d = getdate(); $month = $d; $year = $d; }
Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.
%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 | Часовой пояс (имя или сокращение) |
%% | Символ "%" |
Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.