преобразование строки в дату php
PHP | Дата и время
В этом уроке рассмотрм, как на практике использовать функции PHP по получению даты и времени, а также рассмотрим способы вывода и форматирования даты и времени. Функции PHP, обрабатывающие дату и время, позволяют получать дату и время с того сервера, на котором выполняется сценарий. Также эти функции позволяют нам редактировать и форматировать полученные временные значения перед их отображением (выводом) на экран.
Функция PHP date()
Функция date() выводит текущие дату и время в заданном формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат.
Синтаксис
Параметры функции date():
Примечание: Отметка времени — это последовательность символов, обозначающая дату и / или время, когда произошло определенное событие.
Обязательный параметр format функции date() указывает, как форматировать дату (или время). Формат задается управляющими командами (латиницей), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Ниже представлена таблица с расшифровкой некоторых символов в строке format :
Символ в строке format | Описание | Пример возвращаемого значения |
---|---|---|
День | — | — |
d | День месяца с 2-мя цифрами | от 01 до 31 |
D | День недели в текстовом формате, 3 символа | от Mon до Sun |
z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
Месяц | — | — |
F | Полное название месяца, например, January или March | от January до December |
m | Порядковый номер месяца, 2 цифры | от 01 до 12 |
M | Сокращенное название месяца, 3 символа | от Jan до Dec |
Год | — | — |
Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2019 |
y | Порядковый номер года, 2 цифры | Примеры: 99, 19 |
Время | — | — |
a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или pm |
A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
g | Часы в 12-часовом формате | от 1 до 12 |
G | Часы в 24-часовом формате | от 0 до 23 |
h | Часы в 12-часовом формате | от 01 до 12 |
H | Часы в 24-часовом формате, 2 цифры | от 00 до 23 |
i | Минуты, 2 цифры | от 00 до 59 |
s | Секунды, 2 цифры | от 00 до 59 |
Ниже представлены некоторые примеры получения фактической информации о дате и времени:
Преобразование форматов даты в PHP
Есть ли простой способ преобразовать один формат даты в другой в PHP?
$old_date = date(‘y-m-d-h-i-s’); // работает
$middle = strtotime($old_date); // возвращает false
Хотелось бы, чтобы код возвращал текущую дату. Что я делаю неправильно?
Ответ 1
Второй параметр date() должен быть точной меткой времени (секунды с 1 января 1970 г.). Вы же передаете строку, которую date() не может распознать.
Можно использовать strtotime() для преобразования строки даты в метку времени. Однако даже strtotime() не распознает y-m-d-h-i-s формат.
PHP 5.3 и выше
PHP 5.2 и ниже
// возвращает текущую дату и время
$old_date = date(‘l, F d y h:i:s’);
Ответ 2
Самый простой способ сделать это:
Это позволяет избежать использования strtotime, с которой иногда может быть сложно работать.
Если вы не переходите из одного формата даты в другой, а просто хотите, чтобы текущая дата (или datetime) была в определенном формате, это еще проще:
Ответ 3
Основы
Т о ж е самое в одной строке:
$new_date_format = date(‘Y-m-d H:i:s’, strtotime(‘2021-07-01T22:35:17.02’));
С использованием DateTime()
$date = new DateTime(‘2021-07-01T22:35:17.02’);
Работа с отметками времени Unix
date() принимает временную метку Unix в качестве второго параметра и возвращает отформатированную дату:
$new_date_format = date(‘Y-m-d H:i:s’, ‘1234567890’);
DateTime() работает с отметками времени Unix, добавляя символ « @» перед отметкой времени:
$date = new DateTime(‘@1234567890’);
Разделите substr на 1000
Поскольку метка времени слишком велика для 32-битных систем, чтобы выполнить математические вычисления, нужно будет использовать библиотеку BCMath для выполнения математических расчетов в виде строк:
$timestamp = bcdiv(‘1234567899000’, ‘1000’);
Чтобы получить временную метку Unix, можно использовать strtotime() :
С DateTime () используетс я DateTime::getTimestamp()
$date = new DateTime(‘2021-07-01T22:35:17.02’);
Если вы используете PHP 5.2, можно использовать параметр форматирования «U»:
$date = new DateTime(‘2021-07-01T22:35:17.02’);
Работа с нестандартными и неоднозначными форматами даты
К сожалению, не все даты, с которыми приходится работать разработчику, имеют стандартный формат. К счастью, в PHP 5.3 появилось решение для этого. DateTime::createFromFormat() позволяет нам сообщить PHP, в каком формате находится строка даты, чтобы ее можно было успешно преобразовать в объект DateTime для дальнейших манипуляций.
$date = DateTime::createFromFormat(‘F-d-Y h:i A’, ‘April-18-1973 9:48 AM’);
В PHP 5.4 мы получили возможность делать доступ к членам класса при создании экземпляра, что позволяет нам превратить наш DateTime() в однострочный код:
$new_date_format = (new DateTime(‘2021-07-01T22:35:17.02’))->format(‘Y-m-d H:i:s’);
$new_date_format = DateTime::createFromFormat(‘F-d-Y h:i A’, ‘April-18-1973 9:48 AM’)->format(‘Y-m-d H:i:s’);
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
DateTime::createFromFormat
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Описание
Список параметров
Для вставки в format буквенного символа, вы должны экранировать его с помощью обратного слеша( \ ).
Начало эпохи Unix 1970-01-01 00:00:00 UTC.
Строка, представляющая время.
Если timezone не указан или null и datetime не содержит часовой пояс, то будет использован текущий часовой пояс.
Параметр timezone и текущий часовой пояс будут проигнорированы, если параметр datetime также содержит метку времени UNIX (то есть timestamp вида 946684800 ) или же указанный часовой пояс (то есть 2010-01-28T15:00:00+02:00 ).
Возвращаемые значения
Возвращает созданный экземпляр класса DateTime или false в случае возникновения ошибки.
Список изменений
Примеры
Пример #1 Пример использования DateTime::createFromFormat()
Результат выполнения данных примеров:
Пример #2 Хитрости при использовании DateTime::createFromFormat()
Результатом выполнения данного примера будет что-то подобное:
Пример #3 Формат строки с буквенными символами
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
User Contributed Notes 27 notes
Be warned that DateTime object created without explicitely providing the time portion will have the current time set instead of 00:00:00.
Be aware:
If the day of the month is not provided, creating a DateTime object will produce different results depending on what the current day of the year is.
This is because the current system date will be used where values are not provided.
// on August 1st
printMonth ( «April» );
// outputs April
// on August 31st
printMonth ( «April» );
// outputs May
?>
In this case, each and every character on that string has to be escaped as shown below.
createFromFormat(‘U’) has a strange behaviour: it ignores the datetimezone and the resulting DateTime object will always have GMT+0000 timezone.
?>
The problem is microtime() and time() returning the timestamp in current timezone. Instead of using time you can use ‘now’ but to get a DateTimeObject with microseconds you have to write it this way to be sure to get the correct datetime:
Parsing RFC3339 strings can be very tricky when their are microseconds in the date string.
Since PHP 7 there is the undocumented constant DateTime::RFC3339_EXTENDED (value: Y-m-d\TH:i:s.vP), which can be used to output an RFC3339 string with microseconds:
Note: the difference between «v» and «u» is just 3 digits vs. 6 digits.
echo phpversion ();
// 7.2.7-1+ubuntu16.04.1+deb.sury.org+12019-01-102019-01-01
Reportedly, microtime() may return a timestamp number without a fractional part if the microseconds are exactly zero. I.e., «1463772747» instead of the expected «1463772747.000000». number_format() can create a correct string representation of the microsecond timestamp every time, which can be useful for creating DateTime objects when used with DateTime::createFromFormat():
If you’re here because you’re trying to create a date from a week number, you want to be using setISODate, as I discovered here:
Работа с датой и временем в PHP
Среди разнообразных задач программирования, различные манипуляции со значениями даты и времени встречаются достаточно часто. Редкая автоматизированная система, база данных может обойтись без сохранения информации о времени того или иного процесса. Помимо простейшего добавления даты в запись базы данных или отображения этой даты, встречаются множество задач вывода этих дат в различном виде, проверки соответствия текущего времени с заданным таймером, вычисление срока между двумя датами и многое другое.
Для удобства работы с датами каждый язык программирования имеет свои специальные типы данных для хранения значения даты и времени. Чаще всего это числовое значение, либо целое, либо с плавающей точкой.
В PHP работа с датой чаще всего сталкивается с UNIX TIMESTAMP. Здесь время хранится целым числом. Исчисление времени начинается с 1 января 1970 года. Поэтому, например, дата и время 11.12.2014 19:40:00, будет представлено числом 1418316000. Эта цифра показывает, сколько секунд прошло с нулевой даты 1 января 1970 года, названой Эпохой Unix.
Пример php-страницы, предоставляющий возможности преобразования данных представлен на сайте в разделе программ программой «Преобразование формата даты и времени». Здесь можно сформировать нужную дату в формат UNIX TIMESTAMP, а так же привести этот формат в стандартный, понятный человеку вид.
Получение текущего времени и даты в PHP
Для получения текущего времени сервера используется функция
которая как раз вернет значение в формате unix timestamp.
На первый взгляд не очень удобный формат для человека, но, как известно, чем проще представление данных, тем быстрее выполняется обработка этих значений компьютером. Кроме того, хранение числа в базе данных намного экономичнее, чем какой-либо специальный формат. Так же, PHP работает со временем одинаково и на Unix и на Windows платформе, что обеспечивает возможность использовать код на любой из этих платформ.
Преобразование формата даты и времени в PHP
Простейший механизм, позволяющий преобразовать числовое значение даты на более понятные значения, предоставляется функцией:
Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:
seconds | секунды (0-59) |
minutes | минуты (0-59) |
hours | часы (0-23) |
mday | день месяца (1-31) |
wday | день недели (0-6), начиная с воскресенья |
mon | месяц (1-12) |
year | год |
yday | день года (0-365) |
weekday | название дня недели (например, Monday) |
month | название месяца (например, January) |
0 | количество секунд, прошедших с начала Эпохи Unix |
Полученный массив, позволяет вывести значения нужном виде:
Так же для преобразования формата даты и времени можно воспользоваться функцией:
Формат задается следующими значениями:
Как видно из списка, с помощью этой функции можно получить очень много полезных данных о дате. Например:
Другие символы, входящие в шаблон, будут выведены в строке как есть. Если же потребуется ввести символ, который используется в функции как код формата, перед ними вставляется символ «\». Для значения «\n» (символ перехода на новую строку), следует указать «\\n». Таким образом, можно делать вывод целого сообщения, содержащего сведения о дате и времени:
Преобразование даты и времени в формат timestamp
Для обратного преобразования даты из стандартного формата в числовое значение timestamp применяется функция:
Функция mktime() возвращает значение времени Unix, соответствующую дате и времени, заданным аргументами. Например:
Следует внимательно относится к порядку аргументов функции: часы, минуты, секунды, месяц, день, год.
Кроме простого формирования значения даты в timestamp, функцию mktime() можно использовать для арифметически вычисления с датами. Для этого просто можно ввести необходимые аргументы. Например, если указать 14 месяц, то в итоговом значении, месяц будет 2-й, а значение года увеличится на единицу:
Аналогично можно поступать и с другими параметрами.
Проверка корректности даты в PHP
При работе с датами, особенно при формировании даты предложенной выше функцией mktime() необходимо учитывать корректность вводимой даты. Для этого в PHP используется функция:
Возвращает true если дата, заданная аргументами, является правильной; иначе возвращает false. Дата считается правильной, если:
— год в диапазоне от 1 до 32767;
— месяц в диапазоне от 1 до 12;
— день для заданного месяца с учетом високосного года указаны правильно.
PHP5 Дата и время
Функция PHP date(), используется для форматирования даты и/или времени.
PHP Функция date()
Синтаксис
PHP Получить простую дату
Необходимый параметр формат функции date() определяет, как форматировать дату (или время).
Вот некоторые символы, которые обычно используются для дат:
Пример ниже, форматирует сегодняшнюю дату тремя различными способами:
Пример
PHP Год авторского права
Пример
PHP Получить простое время
Вот некоторые символы, которые обычно используются для времени:
В примере ниже выводится текущее время в указанном формате:
Пример
Обратите внимание, что PHP функция date() вернет текущую дату/время сервера!
PHP Получить свой часовой пояс
Если время, которое вы получили от кода не является правильным время, это, вероятно, потому, что ваш сервер находится в другой стране или настроить для другой часовой пояс.
Так, если вам нужно чтобы время было правильным согласно специфическому местоположению, можно использовать установку часового пояса.
В примере ниже задается часовой пояс «Россия/Пермь», затем, выводит текущее время в указанном формате:
Пример
PHP Создать метку времени
Необязательный параметр timestamp в функции date() задает метку времени. Если Вы не укажите метку времени, будет использоваться текущая дата и время (как показано в примеры выше).
Функция mktime() возвращает метку времени Unix для даты. Временная метка Unix содержит количество секунд между эпохой Unix (1 января 1970 00:00:00 GMT) и время уточняется.
Синтаксис
Пример ниже создает дату и время из нескольких параметров в функции mktime() :
Пример
PHP Создать дату из строки
Синтаксис
Пример ниже создает дату и время из функции strtotime() :
Пример
PHP довольно грамотно преобразовывает строку в дату, так что можно вставить в различные значения:
Пример
Однако, функция strtotime() не идеалена, поэтому не забудьте проверить строки, которые вы туда вставили.
Еще примеры дат
В приведенном ниже примере, выводятся даты для следующих шести суббот:
Пример
Пример ниже выводит количество дней до 4 июля:
Пример
PHP Полный справочник дат
Для полной справки всех функций даты, пройдите к нашему полному PHP Справочик дат.
Справочник содержит краткое описание и примеры использования для каждого функция!