<?
///////////////////////////////////////////////////////////////////////
// Основные функции и классы для работы с датой:
// https://www.php.net/manual/ru/book.datetime.php
///////////////////////////////////////////////////////////////////////
// Входные данные в виде строки (8 марта 2021 года)
$dateString = "2021/03/08";
echo "\$dateString: ".$dateString."<hr/>";
// Распарсим дату (т.к. не понятно что есть что)
list($year, $month, $day) = explode("/", $dateString);
echo "\$year: ".$year."<br/>";
echo "\$month: ".$month."<br/>";
echo "\$day: ".$day."<br/>";
echo "<hr/>";
// Дата - это тип данных в PHP - как и другие типы (строки, числа и прочие).
// Создадим переменную данного типа и поместим в нее нашу дату (год, месяц, день)
// $date = new DateTime('2000-01-01');
// Преобразуем к виду 'Y-m-d'
$dateTemp = implode("-", array($year, $month, $day));
echo "\$dateTemp : ".$dateTemp."<br/>";
// Или все вышеизложенное в одну строку чтобы получить 2021/03/08 -> 2021-03-08
// параметры для форматирования тут: https://www.php.net/manual/ru/datetime.format.php
$dateTemp = DateTime::createFromFormat('Y/m/d', $dateString)->format('Y-m-d');
echo "\$dateTemp (DateTime::createFromFormat): ".$dateTemp."<br/>";
// Вставляем преобразованную строку в конструктор для получения типа Дата
$date = new DateTime($dateTemp);
// Теперь в переменной $data - наша дата, и мы уже можем с ней работать как с объектом,
// у которого есть куча полезных методов
// Например, отформатируем:
$dateFormat = $date->format('d.m.Y');
echo "\$dateFormat: ". $dateFormat. "<hr/>";
// Получим дату в секундах метки времени timestamp Unix
$dateSeconds = strtotime($dateFormat);
echo "\$dateSeconds: ".$dateSeconds."<br/>";
// Получим обратно отформатированную строку с датой
// (передаем форматирование и время секундах)
$dateFormat = date("m.d.Y", $dateSeconds);
echo "\$dateFormat: ". $dateFormat. "<hr/>";
// Теперь добавляем к дате дни часы и прочее
// https://www.php.net/manual/ru/datetime.add.php
// https://www.delftstack.com/ru/howto/php/how-to-add-days-to-date-in-php/
// Добавим день
$date = new DateTime($dateTemp);
$date->add(new DateInterval('P1D')); // P1D - период в 1 день
$dateFormat = $date->format('d.m.Y');
echo "\$dateFormat (plus 1 day): ". $dateFormat. "<hr/>";
// Добавим 45 дней используя переменную
$date = new DateTime($dateTemp);
$days = 45;
$date->add(new DateInterval('P'.$days.'D'));
$dateFormat = $date->format('d.m.Y');
echo "\$dateFormat (plus ".$days." days): ". $dateFormat. "<hr/>";
// Вычитаем дни
$date = new DateTime($dateTemp);
$days = 365;
$dateMinusDay = $date->sub(new DateInterval('P'.$days.'D'));
$dateFormat = $date->format('d.m.Y');
echo "\$dateFormat (minus ".$days." days): ". $dateFormat. "<hr/>";
/////////////////////////////////////////////////////////////////
// Примеры форматирования даты
// https://www.php.net/manual/ru/datetime.createfromformat.php
/////////////////////////////////////////////////////////////////
// --------------------------------------------------------------
// Распарсиваем данные и выводим в нужном формате
// --------------------------------------------------------------
$arResult = array();
$arResult["DATE_CREATE"] = "01.09.2017 16:54:34";
$datePublished = DateTime::createFromFormat('d.m.Y H:i:s', $arResult["DATE_CREATE"])->format('Y-m-d');
echo $arResult["DATE_CREATE"]; // 01.09.2017 16:54:34 // Исходник
echo $datePublished; // 2017-09-01 // Результат
// --------------------------------------------------------------
// Дата и время
// --------------------------------------------------------------
echo date("Y-m-d"); // 2019-03-01 - Дата для сортировки
echo date("Y-m-d h:m:s"); // 2019-03-01 02:03:24 - Дата и время для сортировки
echo date("d.m.Y h:m:s"); // 01.03.2019 02:03:43 - Обычная Дата и время
// Format Date
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
$string = 'April 15, 2003';
echo preg_replace($pattern, $replacement, $string);
// Русификация даты
function rus_date() {
$translate = array(
"am" => "дп", "pm" => "пп", "AM" => "ДП", "PM" => "ПП",
"Monday" => "Понедельник", "Mon" => "пн", "Tuesday" => "Вторник", "Tue" => "вт", "Wednesday" => "Среда",
"Wed" => "ср", "Thursday" => "Четверг", "Thu" => "чт", "Friday" => "Пятница", "Fri" => "пт",
"Saturday" => "Суббота", "Sat" => "сб", "Sunday" => "Воскресенье", "Sun" => "вс",
"January" => "января", "Jan" => "Янв", "February" => "февраля", "Feb" => "Фев",
"March" => "марта", "Mar" => "Мар", "April" => "апреля", "Apr" => "Апр",
"May" => "мая", "May" => "мая", "June" => "июня", "Jun" => "Июн",
"July" => "июля", "Jul" => "Июл","August" => "августа", "Aug" => "Авг",
"September" => "сентября", "Sep" => "Сен", "October" => "октября", "Oct" => "Окт", "November" => "ноября",
"Nov" => "Ноя", "December" => "декабря","Dec" => "Дек", "st" => "ое", "nd" => "ое", "rd" => "е","th" => "ое"
);
if (func_num_args() > 1) {
$timestamp = func_get_arg(1);
return strtr(date(func_get_arg(0), $timestamp), $translate);
} else {
return strtr(date(func_get_arg(0)), $translate);
}
}