- Как сделать вывод даты в формате «Сегодня, Вчера» ?
- Дата вчера сегодня завтра (PHP)
- Дата сегодня
- Дата вчера
- Дата завтра
- Дата послезавтра
- Дата послезавтра
- Категории
- Читайте также
- Комментарии
- Вход на сайт
- Социальные сети
- date
- Список параметров
- Возвращаемые значения
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes
Как сделать вывод даты в формате «Сегодня, Вчера» ?
Поскольку тут тег только PHP, то вот отличная функция:
function new_time($a) < // преобразовываем время в нормальный вид date_default_timezone_set('Europe/Moscow'); $ndate = date('d.m.Y', $a); $ndate_time = date('H:i', $a); $ndate_exp = explode('.', $ndate); $nmonth = array( 1 =>'янв', 2 => 'фев', 3 => 'мар', 4 => 'апр', 5 => 'мая', 6 => 'июн', 7 => 'июл', 8 => 'авг', 9 => 'сен', 10 => 'окт', 11 => 'ноя', 12 => 'дек' ); foreach ($nmonth as $key => $value) < if($key == intval($ndate_exp[1])) $nmonth_name = $value; >if($ndate == date('d.m.Y')) return 'сегодня в '.$ndate_time; elseif($ndate == date('d.m.Y', strtotime('-1 day'))) return 'вчера в '.$ndate_time; else return $ndate_exp[0].' '.$nmonth_name.' '.$ndate_exp[2].' в '.$ndate_time; >
Пример вызова: new_time(time());
/* *** Показывает сколько прошло времени от заданого значения $a *** Если прошло 0. 55 минут: X минут назад, Если сегодня: Сегодня в 17:40, Если вчера: Вчера в 17:40, Если этот год: 17:40 21/04, Если прошлый и менее год: 17:40 21/04/2014, */ function passed_time($a)< $time = time(); $tm = date('H:i', $a); $d = date('d', $a); $m = date('m', $a); $y = date('Y', $a); $last = round(($time - $a)/60); if( $last < 55 ) return "$last минут назад"; elseif($d.$m.$y == date('dmY',$time)) return "Сегодня в $tm"; elseif($d.$m.$y == date('dmY', strtotime('-1 day'))) return "Вчера в $tm"; elseif($y == date('Y',$time)) return "$tm $d/$m"; else return "$tm $d/$m/$y"; >
Я для себя вот так делал: В cuteDate просто передать дату, на выходе будет:
public static function cuteDate($date) < $today = date('d.m.Y', time()); $yesterday = date('d.m.Y', time() - 86400); $dbDate = date('d.m.Y', strtotime($date)); $dbTime = date('H:i', strtotime($date)); switch ($dbDate) < case $today : $output = 'Сегодня в '. $dbTime; break; case $yesterday : $output = 'Вчера в '. $dbTime; break; default : $output = $dbDate; >return $output; >
Тоже самое, но поддерживается Через %s минут , Завтра в %s , формат дат можно переопределять через аргументы функции и учитывается часовой пояс
function passed( \DateTime $date, $time_format = 'H:i', $month_format = 'H:i d/m', $year_format = 'H:i d/m/Y' ) < $today = new \DateTime('now', $date->getTimezone()); $yesterday = new \DateTime('-1 day', $date->getTimezone()); $tomorrow = new \DateTime('+1 day', $date->getTimezone()); $minutes_ago = round(($today->format('U') - $date->format('U')) / 60); $minutes_in = round(($date->format('U') - $today->format('U')) / 60); if ($minutes_ago > 0 && $minutes_ago < 60) < return sprintf('%s минут назад', $minutes_ago); >elseif ($minutes_in > 0 && $minutes_in < 60) < return sprintf('Через %s минут', $minutes_in); >elseif ($today->format('ymd') == $date->format('ymd')) < return sprintf('Сегодня в %s', $date->format($time_format)); > elseif ($yesterday->format('ymd') == $date->format('ymd')) < return sprintf('Вчера в %s', $date->format($time_format)); > elseif ($tomorrow->format('ymd') == $date->format('ymd')) < return sprintf('Завтра в %s', $date->format($time_format)); > elseif ($today->format('Y') == $date->format('Y')) < return $date->format($month_format); > else < return $date->format($year_format); > >
A simple PHP API extension for DateTime
Лучшее что использовал для работы с датой!
Дата вчера сегодня завтра (PHP)
Для получения даты в PHP используется функция date(string $format[, int $timestamp = time()]) , которая возвращает дату отформатированную в соответствии с шаблоном string $format .
Например сегодня: 19 ноября 2013г.
Дата сегодня
Чтобы вывести дату в формате ГГГГ-ММ-ДД , достаточно выполнить следующий код.
Чтобы получить дату отличную от сегодняшнего дня, необходимо вторым параметров передать время в секундах, получаемое при помощи функции int time() , и прибавить/отнять нужное количество секунд.
Дата вчера
Например, чтобы получить вчерашнюю дату, необходимо от значения time() отнять 1 день в секундах.
В одном дне 60 * 60 * 24 = 86400 секунд .
Дата завтра
Чтобы получить дату завтрашнего дня, соответственно, необходимо прибавить 1 день (или 86400 секунд).
Дата послезавтра
Получить дату за послезавтра, необходимо прибавить 2 дня (2 умноженное на 86400 секунд).
Дата послезавтра
Дату за позавчера — необходимо отнять 2 дня (2 умноженное на 86400 секунд).
Категории
Читайте также
- Установить часовой пояс (PHP)
- Как узнать день недели (JavaScript)
- Как получить TIMESTAMP дня текущей недели (PHP)
- Количество секунд от начала дня (PHP)
- Конвертировать миллисекунды в time.Time (GoLang)
- Преобразовать дату в секунды (PHP)
- Время выполнения скрипта (PHP)
- Название предыдущего месяца (PHP)
- Количество секунд между датами (PHP)
- Количество минут между датами (PHP)
- Количество дней между датами (PHP)
- Количество часов между датами (PHP)
Комментарии
Илья, смотрите более подробно функции setlocale() и strftime().
Здравствуйте!
Подскажите, а как сделать дату такого формата 14 ноября 2015 г. ?
А разве это как-то повлияет на вычисление даты? 🙂
> В одном дне 60 * 60 * 24 = 86400 секунд.
А в дни, когда часы переводятся на час вперед или назад?
Вход на сайт
Введите данные указанные при регистрации:
Социальные сети
Вы можете быстро войти через социальные сети:
date
Возвращает строку, отформатированную в соответствии с указанным в параметре format шаблоном. Используется метка времени, заданная параметром timestamp (метка времени Unix), или текущее системное время, если параметр timestamp не задан. Таким образом, параметр timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .
Метки времени Unix не обрабатывают часовые пояса. Используйте класс DateTimeImmutable и его метод форматирования DateTimeInterface::format() для форматирования информации о дате/времени с привязкой к часовому поясу.
Список параметров
Замечание: Функция date() всегда будет генерировать 000000 в качестве микросекунд, поскольку она принимает параметр int , тогда как DateTime::format() поддерживает микросекунды, если DateTime был создан с микросекундами.
Необязательный параметр timestamp представляет собой метку времени типа int , по умолчанию равную текущему локальному времени, если timestamp не указан или null . Другими словами, значение по умолчанию равно результату функции time() .
Возвращаемые значения
Возвращает отформатированную строку с датой.
Ошибки
Каждый вызов к функциям даты/времени при неправильных настройках часового пояса сгенерирует ошибку уровня E_WARNING , если часовой пояс некорректный. Смотрите также date_default_timezone_set()
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( ‘UTC’ );
?php
// выведет примерно следующее: Monday
echo date ( «l» );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS \of F Y h:i:s A’ );
// выведет: July 1, 2000 is on a Saturday
echo «July 1, 2000 is on a » . date ( «l» , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .
Пример #3 Пример совместного использования функций date() и mktime()
$tomorrow = mktime ( 0 , 0 , 0 , date ( «m» ) , date ( «d» )+ 1 , date ( «Y» ));
$lastmonth = mktime ( 0 , 0 , 0 , date ( «m» )- 1 , date ( «d» ), date ( «Y» ));
$nextyear = mktime ( 0 , 0 , 0 , date ( «m» ), date ( «d» ), date ( «Y» )+ 1 );
?>?php
Замечание:
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, \n) следует использовать одинарные кавычки.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
?php
$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘\i\t \i\s \t\h\e jS \d\a\y.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s \m \i\s\ \m\o\n\t\h’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Для форматирования дат на других языках вместо функции date() можно использовать метод IntlDateFormatter::format() .
Примечания
Замечание:
Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).
Временную метку начала запроса можно получить из поля $_SERVER[‘REQUEST_TIME’] .
Смотрите также
- DateTimeImmutable::__construct() — Возвращает новый объект DateTimeImmutable
- DateTimeInterface::format() — Возвращает дату, отформатированную согласно переданному формату
- gmdate() — Форматирует дату/время по Гринвичу
- idate() — Преобразует локальное время/дату в целое число
- getdate() — Возвращает информацию о дате/времени
- getlastmod() — Получает время последней модификации страницы
- mktime() — Возвращает метку времени Unix для заданной даты
- IntlDateFormatter::format() — Форматирует значение даты/времени в виде строки
- time() — Возвращает текущую метку системного времени Unix
- Предопределённые константы даты и времени
User Contributed Notes
- Функции даты и времени
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get