Дата и время
В MV дата и время хранятся в полях моделей типа date и date_time. В базе данных они хранятся в SQL формате вида 'yyyy-mm-dd hh:mm:ss'. При занесении и извлечении данных из базы необходимо пользоваться специальными методами для приведения значений к нужному формату, при помощи класса I18n, который также отвечает за интернационализацию и локализацию.
Основной формат даты задан в файле локализации, который находится в папке /adminpanel/i18n/[region]/locale.php.
Методы класса I18n
- formatDate($date [,$format]) - переводит дату из SQL формата ‘yyyy-mm-dd hh:mm:ss’ к текущему формату, заданному в файле локализации, если передать необязательный параметр в виде 'only-date', то вернет только дату, а если виде 'no-seconds', то секунды будут отброшены. Также формат даты можно передать в виде, аналогичном PHP функции date(), например ‘d-m-Y’.
- dateForSQL($date) - переводит дату из текущего форматы в SQL формат, для записи в базу данных.
- getCurrentDate([$sql_format]) - возвращает текущую дату в соответствии с форматом локализации. Если передать необязательный параметр в виде 'SQL', то текущая дата будет возвращена в SQL формате.
- getCurrentDateTime([$sql_format]) - возвращает текущую дату и время в соответствии с форматом локализации.
- timestampToDate($timestamp) - переводит временную метку в дату в соответствии с форматом локализации. Если передать необязательный параметр в виде 'SQL', то текущая дата будет возвращена в SQL формате.
- getMonth($number) - возвращает название месяца по его номеру, например 'Февраль', 'Март'.
- getMonthCase($number) - возвращает название месяца в родительном падеже, например 'Февраля', 'Марта'.
- getWeekDayName($date) - возвращает название дня недели, например 'Вторник', 'Четверг'
//Находим новость по id
$record = $mv -> news -> find(32);
//Выводим дату, преобразовывая SQL формат
echo I18n::formatDate($record -> date);
//Форматируем дату
echo I18n::formatDate($record -> date, 'd/m/Y'));
//Выводим дату и время без секунд
echo I18n::formatDate($record -> date, 'no-seconds');
//Выводим только дату, без времени (для date_time)
echo I18n::formatDate($record -> date, 'only-date');
//Выводим день недели
echo I18n::getWeekDayName($record -> date);
//Передаем в запись текущую дату
$record -> date = I18n::getCurrentDateTime();
$record -> update();
//Подсчет количества новостей за текущий день
$number = $news -> countRecords(['date' => I18n::getCurrentDate()]);
//Перевод даты из SQL к виду '12 ноября 2023'
public function formatDate($date)
{
$date = explode('-', $date);
return $date[2].' '.I18n::getMonthCase(intval($date[1])).' '.$date[0];
}
Предыдущий раздел
Файлы и изображения