Здравствуйте.
Стандартный формат даты 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 функции, функции наследства.
До свидания. Любви вам, это главное.