Работа с датой на php в Битрикс и не только
Последние записи
На D7 работа с датой\временем осуществляется с помощью классов Bitrix\Main\Type\Date
и \Bitrix\Main\Type\DateTime
Подключение класса
use Bitrix\Main\Type\DateTime;
Битрикс выводим дату в формате "3 ноября"
strtolower(FormatDate("d F", MakeTimeStamp($arItem['ACTIVE_FROM'])))
Получаем настройки формата даты из админ. части
\Bitrix\Main\Type\DateTime::getFormat() //вернет, к примеру, "Y-m-d H:i:s"
Создание объекта класса \Bitrix\Main\Type\DateTime
new \Bitrix\Main\Type\DateTime("01.04.2020 12:00:00");
Создаем объект класса \Bitrix\Main\Type\DateTime
из текущего времени
new \Bitrix\Main\Type\DateTime(date("d.m.Y H:i:s"));
Создание объекта класса \Bitrix\Main\Type\DateTime
из произвольного формата
$dateTime = new \Bitrix\Main\Type\DateTime("2020-04-01 12:00:00", "Y-m-d H:i:s");
Создание объекта класса \Bitrix\Main\Type\DateTime
из произвольного формата с указанием временной зоны
$timeZone = new \DateTimeZone('Europe/Moscow'); //Для Москвы
new \DateTimeZone('Asia/Novosibirsk'); //Для Новосибирска
$dateTime = new \Bitrix\Main\Type\DateTime("2020-04-01 12:00:00", "Y-m-d H:i:s", $timeZone);
Создание объекта класса \Bitrix\Main\Type\DateTime
из timestamp
$dateTime = \Bitrix\Main\Type\DateTime::createFromTimestamp(1585742400);
Создание объекта класса \Bitrix\Main\Type\DateTime
из
$phpDateTime = new DateTime('2020-04-01');
$dateTime = \Bitrix\Main\Type\DateTime::createFromPhp($phpDateTime);
Создание объекта класса \Bitrix\Main\Type\DateTime
из текстовой строки
$dateTime = \Bitrix\Main\Type\Date::createFromText("вчерашнее утро");
Получаем время в формате текущего сайта
$dateTime->toString()
Получаем время в unix timestamp
$dateTime->getTimestamp()
Получаем время в произвольном формате
$dateTime->format("Y-m-d H:i:s")
Получаем текущую временную зону
$dateTime->getTimeZone()
Проверка на объект \Bitrix\Main\Type\DateTime
или \Bitrix\Main\Type\Date
if($dateTime instanceof \Bitrix\Main\Type\DateTime || $dateTime instanceof \Bitrix\Main\Type\Date)
Сложение и вычитание дат с использованием читаемого формата:
$dateTime->add("1 year + 3 months - 5 seconds");
Перевести формат времени из формата битрикс в формат php:
\Bitrix\Main\Type\DateTime::convertFormatToPhp('YYYY-MM-DD HH-MI-SS') // "Y-m-d H-i-s"
Проверка на корректность даты:
\Bitrix\Main\Type\DateTime::isCorrect("2018-06-14 02:20:00","Y-m-d H:i:s")
Парсим объект даты\времени на составляющие
$datetime = "21.01.2004 23:44:15"; //Исходное время
$format = "DD.MM.YYYY HH:MI:SS"; //Формат
if ($arr = ParseDateTime($datetime, $format))
{
echo "День: ".$arr["DD"]; // День: 21
echo "Месяц: ".$arr["MM"]; // Месяц: 1
echo "Год: ".$arr["YYYY"]; // Год: 2004
echo "Часы: ".$arr["HH"]; // Часы: 23
echo "Минуты: ".$arr["MI"]; // Минуты: 44
echo "Секунды: ".$arr["SS"]; // Секунды: 15
}
Разница между датами в днях\часах\минутах
function dateDiff($date1, $date2)
{
$time = new DateTime($date1);
$since_time = $time->diff( new DateTime($date2) );
$result['days'] = $since_time->days;
$result['hours'] = $since_time->days * 24 + $since_time->h;
$result['minutes'] = ($since_time->days * 24 * 60) + ($since_time->h * 60) + $since_time->i;
return $result;
}
Конвертируем timestamp в привычный формат
function timestampToDate($timestamp,$format = "d.m.Y H:i:s"){
return date($format, $timestamp);
}
Вычитаем\прибавляем к дате месяц\день и т.д.
function dateDecrementByMonth($date_start){//Вычитаем из даты месяц
return date("d-m-Y", strtotime("-1 month", strtotime($date_start)));
}
function dateIncrementByMonth($date_start){//Прибавляем к дате месяц
return date("d-m-Y", strtotime("+1 month", strtotime($date_start)));
}
Памятка по принятым стандартам формата даты в разных странах
Россия DD.MM.YYYY HH:MI:SS
США MM-DD-YYYY HH:MI:SS
Международный английский DD-MM-YYYY HH:MI:SS
Великобритания DD/MM/YYYY HH:MI:SS
На основе материала:
Комментарии