PHP несколько полезных функций дат

Здравствуйте.

Стандартный формат даты MySQL: YYYY-mm-dd.

То есть сперва идут четыре цифры года, дефис, 2 цифры месяца с ведущим нулём, если он есть, дефис, и 2 цифры дня также с ведущим нулём, если он есть.

Напишем функции преобразования даты из формата MySQL в формат дат, принятых на територии России, т.е. такой: dd.mm.YYYY

Тут понятно, две цифры дня, две цифры месяца после точки, и 4 цифры года также после точки.

// преобразуем из MySql date-формата в наш формат: dd.mm.yyyy (d.m.Y)
// 1970-08-22 --> 22.08.1970
function ToOurDate($thedate) { 
	$d = substr($thedate, 8, 2);	// день
	$m = substr($thedate, 5, 2);	// месяц
	$y = substr($thedate, 0, 4);  // год
	return "$d.$m.$y";
}

И функция обратного преобразования, из нашего формата, принятого в России, в формат MySQL, чтобы можно было дату сохранить в таблице:

// преобразуем нашего формата (dd.mm.yyyy (d.m.Y)) в MySql DATE-формат
//   22.08.1970 --> 1970-08-22
function ToMySqlDate($thedate) { 
	$d = substr($thedate, 0, 2);	// день
	$m = substr($thedate, 3, 2);	// месяц
	$y = substr($thedate, 6, 4);  // год
	return "$y-$m-$d";
}

Следующая функия ShowMyDate – показать дату (формат MySQL) в удобочитаемом виде.
На вход передаём дату в формате MySQL, например “2020-04-05“, а на выходе получаем строку типа “5 апреля 2020 года“. Или просто “5 апреля“, если не укажем флаг ifyear – показывать год.

Флаг ifyear имеет тройное значение: 0 – не показывать год совсем, 1 – показать год со словом “года”, и 2 – показать просто цифры года.

/**
	Вернуть дату из формата MySQL YYYY-MM-DD (mydate)
	в удобочитаемом виде
	ifmonth - добавить к дате месяц, ifyear - добавить год
**/
function ShowMyDate($mydate, $ifmonth = 1, $ifyear = 0)
{
	$mon = array('', 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня',
						'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
	$m = 0;
	$y = 0;
	$day = substr($mydate, 8, 2);//день
	if($day{0} == '0') $day = $day{1}; // обрежем ведущий нолик, если есть
	if($ifmonth) {
		$m = intval(substr($mydate, 5, 2));
		if($m < 1 || $m > 12) $m = 0;
	}
 
 
	$r = $day;
	if($m) $r .= ' ' . $mon[$m];//добавим месяц письмом
 
	if($ifyear)
		$y = intval(substr($mydate, 0, 4));
 
	if($ifyear == 1)
		$r .= " $y года";
	elseif($ifyear == 2)
		$r .= " $y";
 
	return $r;
}//ShowMyDate

И наконец функция ShowFullDates. На входе передём две даты в формате MySQL, на выходе получаем строку типа “15 декабря-16 мая“,
или “15-20 марта“, или “15 марта 2020 года-20 мая 2021 года“.
Флаг ifyear – показывать год, имеет то же значение, что и для функции ShowMyDate.
Функция распознаёт разные месяцы и разные года, и при необходимости строит соотв. строки.

///////////////////////////////////////////////////////////////////////////////
/**
	Вернуть две даты (формата MySQL)
	в виде 1-2 января 2014 года
**/
function ShowFullDates($d1, $d2, $ifyear = 0)
{
	if($d1 == $d2) return ShowMyDate($d1, 1, $ifyear);
 
	$y1 = intval(substr($d1, 0, 4));
	$y2 = intval(substr($d2, 0, 4));
 
	// если разные года
	if($y1 != $y2) return ShowMyDate($d1, 1, $ifyear) . '-' . ShowMyDate($d2, 1, $ifyear);
 
	$m1 = intval(substr($d1, 5, 2));
	$m2 = intval(substr($d2, 5, 2));
 
	if($m1 == $m2) return ShowMyDate($d1, 0, 0) . '-' . ShowMyDate($d2, 1, $ifyear);
 
	return ShowMyDate($d1, 1, 0) . '-' . ShowMyDate($d2, 1, $ifyear);
}//ShowFullDates

Пока всё, хватит с нас функций. Эти функции я написал лет 12-15 назад, и до сих пор они служат мне верой и правдой во всём. Это legacy функции, функции наследства.

До свидания. Любви вам, это главное.