формат даты mysql в формат php
PHP date() format when inserting into datetime in MySQL
What is the correct format to pass to the date() function in PHP if I want to insert the result into a MySQL datetime type column?
I’ve been trying date(‘Y-M-D G:i:s’) but that just inserts «0000-00-00 00:00:00» everytime.
13 Answers 13
Try: date(‘Y-m-d H:i:s’) which uses the numeric equivalents.
From the comments of php’s date() manual page:
Here’s an alternative solution: if you have the date in PHP as a timestamp, bypass handling it with PHP and let the DB take care of transforming it by using the FROM_UNIXTIME function.
I use the following PHP code to create a variable that I insert into a MySQL DATETIME column.
This will hold the server’s current Date and Time.
I use this function (PHP 7)
Older versions of PHP (PHP
Format time stamp to MySQL DATETIME column :
Format MySQL datetime with PHP
There is no need no use the date() method from PHP if you don’t use a timestamp. If dateposted is a datetime column, you can insert the current date like this:
This has been driving me mad looking for a simple answer. Finally I made this function that seems to catch all input and give a good SQL string that is correct or at least valid and checkable. If it’s 1999-12-31 it’s probably wrong but won’t throw a bad error in MySQL.
Note: I understood the question referring to current time.
Формат даты mysql в формат php
При работе с любым языком программирования, задачи, касающиеся даты и времени, часто является тривиальными и простыми. И PHP, к счастью, имеет один из самых мощных инструментов по работе с датой/временем, который поможет вам легко справиться со всеми видами задач связанных с временем: работа с Unix timestamp, форматирование дат для лучшего восприятия их человеком, работа с часовыми поясами, подсчет количества дней между сегодняшним днем и, например, вторым вторником в следующем месяце, и т.д. В этой статье вы ознакомитесь с основными временными функциями PHP (time(), mktime() и date()) и их объектно-ориентированными «коллегами», а затем познакомитесь с MySQL-датами, и мы покажем вам, как подружить их с PHP.
PHP-функции даты и времени
Большая часть этой статьи будет посвящена работе с Unix-временем или POSIX. Время здесь представлено в виде количества секунд, прошедших с полуночи 1 января 1970 года, UTC. Если вы заинтересованы в полной истории времени Unix, то ознакомьтесь со статьей Unix time в Википедии.
UTC, известное также под именем Coordinated Universal Time, также известное как GMT, а иногда и Zulu time, это время нулевого градуса долготы. Все остальные часовые пояса в мире являются положительным или отрицательным смещением относительно этого времени. UTC и Unix время сделает вашу жизнь проще, когда вам придется иметь дело с часовыми поясами. Я расскажу об этом чуть позже, а пока рассмотрим некоторые функции для работы со временем.
Получение текущего времени Unix
Функция time() без аргументов возвращает количество секунд, прошедших с начала эпохи Unix. Чтобы проиллюстрировать это я буду использовать интерактивную консоль PHP.
Если вам нужен массив для работы с Unix-временем, используйте функцию getdate(). Она принимает необязательный аргумент Unix timestamp, если его нет, то по умолчанию это значение функции time().
Форматирование времени Unix
Unix-время может быть легко отформатировано в почти любую строку, чтобы человек мог его прочитать. Функция date() используется для форматирования Unix timestamp в понятную для человека строку и принимает аргументы форматирования и необязательный аргумент «время». Если необязательный аргумент «время» не указан, используется значение функции time(), т.е. текущее время.
Аргумент «r» при форматировании строки возвращает время в формате RFC 2822. Конечно, Вы можете использовать другие спецификаторы, чтобы определить свои собственные форматы.
Полный список допустимых значений для форматирования, смотрите на странице функции date() в документации по PHP. Функция становится еще более полезной, когда используется в сочетании с функциями mktime() и strtotime(), это вы увидите в дальнейших примерах.
Создание Unix-времени от заданного времени
Функция mktime() используется, чтобы создать метку времени на основе списка значений, которые соответствуют каждой части даты (секунды, минуты, часы, год и т.д.). Она принимает ряд целочисленных аргументов для установки каждой части даты в следующем порядке:
Вы можете видеть, что mktime() может быть очень полезна при работе с запросами к базе данных, которые используют диапазоны дат определенные пользователем. Например, если вы храните timestamp в виде целых чисел (Unix время) в MySQL, очень легко настроить общий временной диапазон для запроса.
Преобразование английских дат в Unix время
Почти магическая функция strtotime() принимает строку даты/времени в качестве первого аргумента, и Unix timestamp, чтобы использовать в качестве основы для преобразования. Смотрите документацию для получения информации о допустимых форматах даты.
Объекты DateTime и DateTimeZone
Объект PHP DateTime является объектно-ориентированным подходом к работе с датами и часовыми поясами. Конструктор принимает строковое представление времени, очень похоже на функцию strtotime(), о которой говорилось выше. Значение по умолчанию, если аргумент не указан, «now» (сейчас).
Метод format() объекта DateTime работает так же, как функция date(), и принимает все те же символы форматирования. Объект DateTime также имеет несколько полезных констант, которые могут быть переданы в метод format().
Полный список констант можно найти на странице документации DateTime.
Поскольку мы будем работать с часовыми поясами, давайте установим часовой пояс по умолчанию. В файле конфигурации php.ini (у меня есть один для CLI и один для Apache) найдите раздел, который выглядит следующим образом:
Если значение не указано для date.timezone, PHP будет пытаться сделать все возможное, чтобы определить часовой пояс системы которая установлена на вашем сервере. Вы можете проверить, какое значения использует PHP при помощи функции date_default_timezone_get().
Давайте установим временную зону сервера на время UTC (date.timezone = UTC) и сохраним файл конфигурации. Вы должны перезагрузить Apache или CLI, чтобы увидеть изменения.
Объект DateTime включает в себя внутренний экземпляр класса DateTimeZone для отслеживания часовых поясов. Когда вы создаете новый экземпляр DateTime, DateTimeZone должен быть установлен по умолчанию как указано в php.ini.
Полный список допустимых имен часовых поясов можете найти на соответствующей странице документации.
Теперь вы можете увидеть разницу во времени, между двумя объектами DateTime, созданных для разных часовых поясов. Например, вот пример, который преобразует время из UTC в America/New_York(EST).
Использование даты в MySQL и PHP
Если вы использовали MySQL на любом уровне, вы, вероятно, обратили внимание на тип данных DATETIME. Он выглядит как дата, и если бы вы сказали, что это дата, то вы были бы правы. Но поскольку вы выбираете его из MySQL, в PHP эта дата уже представляет собой строку, которая выглядит как дата.
* Да, я знаю, что MySQL имеет множество функций форматирования даты. Почему же мы хотим отформатировать дату прямо из базы данных в таком случае? У нас может быть несколько различных преобразований и форматов, которые мы хотим применить. И лучше всего форматировать дату только тогда, когда человек собирается её увидеть.
Выполнив этот простой скрипт, вы можете видеть, что все данные с поля DATETIME отформатированны в строку без информации о часовом поясе.
Итак, как вам справляться с датами и часовыми поясами в PHP и MySQL? Сохранять даты как Unix timestamps.
При работе с MySQL, я обычно создаю столбец таблицы, который будет хранить даты как INTEGER UNSIGNED. При вставке даты можно использовать функции time() из PHP или UNIX_TIMESTAMP() из MySQL.
Если вы хотите использовать MySQL для форматирования даты, то вы можете. Но время будет соответствовать часовому поясу сервера и я советую вам воздержаться от любого типа форматирования, то тех пока вы не находитесь в шаблоне/на уровне представления в вашем веб-приложении и готовы, чтобы человеческий глаз увидел это.
Вы можете легко конвертировать сохраненный Unix timestamp (UTC) в любую дату в часовом поясе конкретного пользователя.
Если бы мы изменили часовой пояс на America/Los_Angeles, то в результате дата выглядела бы так:
А America/New_York вернет:
Заключение
Работа с датами и временными зонами является частью задач многих программистов, но вам не о чем беспокоиться, если у вас есть PHP, надежный и простой в использовании инструмент для работы с датами.
Вы видели, как легко получить метку времени, как отформатировать дату в любой формат, как преобразовать английское представление даты в метку времени (timestamp) и как преобразовывать время между часовыми поясами. Если выделить две основных темы из статьи, то это: 1) Unix время и 2) UTC, как основная временная зона для всех дат при работе с PHP и MySQL.
Идея отсчитывать всё время по UTC относится не только к PHP и MySQL, это считается хорошей практикой в любом языке.
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
Работа с датой и временем в MySQL+PHP
Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной date_col в течение последних 30 дней:
Примечание: в версии 4.0 функция WEEK(#,0) была изменена с целью соответствия календарю США.
Заметьте, если неделя является последней неделей прошлого года, MySQL вернет 0 если вы не указали 2 или 3 как опциональный аргумент:
Можно считать, что MySQL должен вернуть 52, так как данная дата и является 52-ой неделей года 1999. Мы решили возвращать 0, так как мы хотим, чтобы функция давала «номер недели в указанном году». Это делает функцию WEEK() более надежной при использовании совместно с другими функциями, которые вычисляют части дат.
Если вам все же важно уточнить корректную неделю в году, тогда вы можете использовать 2 или 3 как опциональный аргумент или использовать YEARWEEK()
Обратите внимание, что номер недели отличается от того, который возвращает функция WEEK() (0), будучи вызванной с опциональным аргументом 0 или 1. Это потому, что WEEK() возвращает номер недели именно в указанном году.
HOUR(time)- Возвращает час для аргумента time в диапазоне от 0 до 23:
В MySQL формат выражения expr допускает любые разделительные знаки. Разделители, представленные в данной таблице, приведены в качестве примеров. Если аргумент date является величиной типа DATE и предполагаемые вычисления включают в себя только части YEAR, MONTH, и DAY (т.е. не содержат временной части TIME), то результат представляется величиной типа DATE. В других случаях результат представляет собой величину DATETIME:
При использовании некорректных значений дат результат будет равен NULL. Если при суммировании MONTH, YEAR_MONTH или YEAR номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца:
Из предыдущего примера видно, что слово INTERVAL и ключевое слово type не являются регистро-зависимыми.
Функция TO_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку не учитывает дни, утерянные при изменении календаря.
Функция FROM_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку она не учитывает дни, утерянные при изменении календаря.
Все другие символы просто копируются в результирующее выражение без интерпретации:
В MySQL 3.23 символ ‘%’ должен предшествовать символам определителя формата. В более ранних версиях MySQL символ ‘%’ необязателен.
Причина того, что промежутки для месяца и дня начинаются с нуля заключается в том, что MySQL позволяет использовать неполные даты, такие как ‘2004-00-00’, начиная с MySQL 3.23.
При использовании функции UNIX_TIMESTAMP в столбце TIMESTAMP эта функция будет возвращать величину внутренней временной метки непосредственно, без подразумеваемого преобразования строки во временную метку («string-to-unix-timestamp» ). Если заданная дата выходит за пределы допустимого диапазона, то функция UNIX_TIMESTAMP() возвратит 0, но следует учитывать, что выполняется только базовая проверка (год 1970-2037, месяц 01-12, день 01-31). Если необходимо выполнить вычитание столбцов UNIX_TIMESTAMP(), результат можно преобразовать к целым числам со знаком. See Раздел 6.3.5, «Функции приведения типов».
Формат даты mysql в формат php
(PHP 4, PHP 5, PHP 7, PHP 8)
date — Форматирует вывод системной даты/времени
Описание
Список параметров
Возвращаемые значения
Ошибки
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( ‘UTC’ );
// выведет примерно следующее: Monday
echo date ( «l» );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS \of F Y h:i:s A’ );
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Пример #3 Пример совместного использования функций date() и mktime()
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘\i\t \i\s \t\h\e jS \d\a\y.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s \m \i\s\ \m\o\n\t\h’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Примечания
Смотрите также
User Contributed Notes 20 notes
Things to be aware of when using week numbers with years.
Conclusion:
if using ‘W’ for the week number use ‘o’ for the year.
In order to define leap year you must considre not only that year can be divide by 4!
The correct alghoritm is:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
So the code should look like this:
For Microseconds, we can get by following:
echo date(‘Ymd His’.substr((string)microtime(), 1, 8).’ e’);
FYI: there’s a list of constants with predefined formats on the DateTime object, for example instead of outputting ISO 8601 dates with:
echo date ( ‘Y-m-d\TH:i:sO’ );
?>
You can use
echo date ( DateTime :: ISO8601 );
?>
instead, which is much easier to read.
this how you make an HTML5 tag correctly
It’s common for us to overthink the complexity of date/time calculations and underthink the power and flexibility of PHP’s built-in functions. Consider http://php.net/manual/en/function.date.php#108613
date() will format a time-zone agnostic timestamp according to the default timezone set with date_default_timezone_set(. ). Local time. If you want to output as UTC time use:
$tz = date_default_timezone_get ();
date_default_timezone_set ( ‘UTC’ );
For HTML5 datetime-local HTML input controls (http://www.w3.org/TR/html-markup/input.datetime-local.html) use format example: 1996-12-19T16:39:57
To generate this, escape the ‘T’, as shown below:
If timestamp is a string, date converts it to an integer in a possibly unexpected way:
The example below formats today’s date in three different ways:
The following function will return the date (on the Gregorian calendar) for Orthodox Easter (Pascha). Note that incorrect results will be returned for years less than 1601 or greater than 2399. This is because the Julian calendar (from which the Easter date is calculated) deviates from the Gregorian by one day for each century-year that is NOT a leap-year, i.e. the century is divisible by 4 but not by 10. (In the old Julian reckoning, EVERY 4th year was a leap-year.)
This algorithm was first proposed by the mathematician/physicist Gauss. Its complexity derives from the fact that the calculation is based on a combination of solar and lunar calendars.
At least in PHP 5.5.38 date(‘j.n.Y’, 2222222222) gives a result of 2.6.2040.
So date is not longer limited to the minimum and maximum values for a 32-bit signed integer as timestamp.
Prior to PHP 5.6.23, Relative Formats for the start of the week aligned with PHP’s (0=Sunday,6=Saturday). Since 5.6.23, Relative Formats for the start of the week align with ISO-8601 (1=Monday,7=Sunday). (http://php.net/manual/en/datetime.formats.relative.php)
This can produce different, and seemingly incorrect, results depending on your PHP version and your choice of ‘w’ or ‘N’ for the Numeric representation of the day of the week:
Prior to PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 10 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 10 Oct 2016
Since PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 03 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 03 Oct 2016
I’ve tested it pretty strenuously but date arithmetic is complicated and there’s always the possibility I missed something, so please feel free to check my math.
The function could certainly be made much more powerful, to allow you to set different days to be ignored (e.g. «skip all Fridays and Saturdays but include Sundays») or to set up dates that should always be skipped (e.g. «skip July 4th in any year, skip the first Monday in September in any year»). But that’s a project for another time.
$start = strtotime ( «1 January 2010» );
$end = strtotime ( «13 December 2010» );
// Add as many holidays as desired.
$holidays = array();
$holidays [] = «4 July 2010» ; // Falls on a Sunday; doesn’t affect count
$holidays [] = «6 September 2010» ; // Falls on a Monday; reduces count by one
?>
Or, if you just want to know how many work days there are in any given year, here’s a quick function for that one:
Преобразование даты в mysql с помощью DATE_FORMAT()
Как известно, все даты хранятся в mysql в обратном порядке год-месяц-число(2008-10-18), иногда даже без разделителя(20081018).
Чтобы вывести дату, нужно ее преобразовать в нормальный читаемый вид.
Тут есть два способа преобразования, эффективный и не очень.
Не эффктивный способ это когда дату выводимую из mysql преобразуют с помощью php.
Сам лично так делал очень долгое время. Перед выводом на экран переворачивал каждую дату с помощью php функции.
Если количество преобразований не большое, то можно переворачивать дату и с помощью php, ничего плохого тут нет, но если нужно будет выдернуть десятки-сотни тысяч записей и в каждой преобразовать дату, то тут конечно намного быстрее будет преобразование дат с помощью mysql.
В mysql существует отличная функция DATE_FORMAT(), она очень похожа на php функцию date().
Вот пример использования
SELECT DATE_FORMAT(«2008-11-19»,’%d.%m.%Y’);
результат
Все очень просто и быстро, нет необходимости крутить даты с помощью php.
Вот список определителей этой функции
Определитель | Описание |
%M | Название месяца (январь. декабрь) |
%W | Название дня недели (воскресенье. суббота) |
%D | День месяца с английским суффиксом (0st, 1st, 2nd, 3rd и т.д.) |
%Y | Год, число, 4 разряда |
%y | Год, число, 2 разряда |
%X | Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%V’ |
%x | Год для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%v’ |
%a | Сокращенное наименование дня недели (Вс. Сб) |
%d | День месяца, число (00..31) |
%e | День месяца, число (0..31) |
%m | Месяц, число (00..12) |
%c | Месяц, число (0..12) |
%b | Сокращенное наименование месяца (Янв. Дек) |
%j | День года (001..366) |
%H | Час (00..23) |
%k | Час (0..23) |
%h | Час (01..12) |
%I | Час (01..12) |
%l | Час (1..12) |
%i | Минуты, число (00..59) |
%r | Время, 12-часовой формат (hh:mm:ss [AP]M) |
%T | Время, 24-часовой формат (hh:mm:ss) |
%S | Секунды (00..59) |
%s | Секунды (00..59) |
%p | AM или PM |
%w | День недели (0=воскресенье..6=суббота) |
%U | Неделя (00..53), где воскресенье считается первым днем недели |
%u | Неделя (00..53), где понедельник считается первым днем недели |
%V | Неделя (01..53), где воскресенье считается первым днем недели. Используется с `%X’ |
%v | Неделя (01..53), где понедельник считается первым днем недели. Используется с `%x’ |
%% | Литерал `%’. |
Комментарии
28.11.2008 Жека
Аналогично! Всегда пользовался своей функцией на php
03.12.2008 Сергей
Ну а вообще, кто то хоть пользуется таким подходом?
Или все используют php для переворота даты?
Я лично никогда не переворачивал дату в mysql, до сих пор все в php делаю
28.06.2009 Илья
К сожалению, ничего не получилось 🙁
08.07.2009 Виталий
Круто, спасибо за функцию. Интересно, а ёщё какие нибуть загогулины есть?
14.07.2009 DSaint
Спасибо, очень помогло. Осталось только название месяца на русском отобразить)
28.07.2009 Влад
mysql=>PHP
select unix_timestamp(start_date) as start_date_php
php-code
date(‘d.m.Y’,$row[‘start_date_php’])
PHP=>MySQL
update table set start_date=DATE_FORMAT(STR_TO_DATE(‘19.12.2009 18:35:22′,’%d.%m.%Y %H:%i’),’%Y.%m.%d %H:%i’)
18.08.2009 Гость
2: DSaint
Есть такая чудная функция:
ELT( MONTH(‘2004-04-10’), ‘Янв.’,’Фев.’,’Март’,’Апр.’,’Май’,’Июнь’,’Июль’,’Авг.’,’Сен.’,’Окт.’,’Ноя.’,’Дек.’)
29.10.2009 Владимир
Спасибо, про ELT( MONTH(‘2004-04-10’), ‘Янв.’,’Фев.’,’Март’,’Апр.’,’Май’,’Июнь’,’Июль’,’Авг.’,’Сен.’,’Окт.’,’Ноя.’,’Дек.’)
я не слыхал.
07.10.2010 Евгений
А что быстрее работает? Преобразование в запросе, или в результате работы php-функции?
07.10.2010 defender
Как минимум меньше памяти на обработку меньше вызовов функций меньше выделений памяти. Постоянно подобным пользуюсь только не в mysql а в postgresql.
08.10.2010 Админ
Евгений, вот defender правильно сказал, через базу это преобразование должно сработать красивее, но конечно если речь идет об извлечении огромного количества данных.
Если вы дергаете 10-20 записей, то нет никакой разницы как преобразовать дату, по сравнению с остальными нагрузками это мелочь.
27.01.2011 pcemma
ухх спасибо аффтору (: отпала нужда юзать свою мега крутую функцию для преобразования (:
13.04.2011 Xes
кАК ЕЕ ПОЛЬЗОВАТЬ В ПХП
while ($sqlr=mysql_fetch_array($sql))
<
echo ($sqlr[‘comadd’].’ ‘.$sqlr[‘comment’].’
14.04.2011 Виталий
У меня в базе дата записана в формате 19.11.2008 тип таблицы VARCHAR, как ее перезаписать в базу в формате 2008-11-19?
Руками просто очень долго.
Спасибо.
15.04.2011 админ
Xes, это функция MySQL, использовать ее нужно в запросе sql, который судя по вашему коду находится где-то выше. В данном участке кода ее нельзя использовать.
15.04.2011 админ
Виталий, просто измените тип ячейки на DATE, mysql автоматически переведет все данные в этой ячейке именно в формат 2008-11-19.
Но на всякий случай перед изменением типа ячейки сделайте дамп этой таблицы, так как вдруг база что то не то сделает и таблица сломается вообще.
Если вам важно оставить тип поля varchar, то после того, как вы установите тип DATE, установите обратно varchar.
Это самый простой вариант, но не совсем правильный, но я проверил, он работает.
24.05.2011 Константин
а я всегда беру SELECT *,UNIX_TIMESTAMP(created) AS created FROM.
а мотом могу хоть в каком формате. Хоть только день, хоть только время.
и сравнивать, что больше 14.05.2011 или 14.05.2010.
А записываю так:
. date=’.gmdate(«Y-m-d H:i:s»,$created).
и вобщем-то, не вижу причин менять привычки
24.05.2011 сергей
Константин, да я и сам использую для вывода php date(), просто тут рассмотрен вариант преобразования даты не через php, а через mysql.
Я бы сказал, что это просто обзор mysql функции и она конечно имеет право на существование.