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
Почему date выводит неправильную дату?
Добрый день. Появился вопрос а найти ответ не получается. У меня сейчас на часах 13:49 а date(‘H:i’) выводит 9:49 Не понимаю в чем проблема. Функция getdate() тоже выводит 9:49 часов. Мой часовой пояс GMT +3 или UTC +4
Локальный сервер.Простой 2 комментария
Ankhena, не понял что вы хотели сказать. Часовой пояс выходит UTC +4. Вы имеете ввиду что date() возвращает не локальное а абсолютное время?
Edgark, думаю, что нет. PHP живёт по UTC (всемирному времени). И это логично: должна быть единая точка отсчёта для всей планеты, сеть-то глобальная.
date_default_timezone_set ('Europe/Moscow'); print_r(getdate());
FanatPHP, просто у php.ini есть константа date.timezone. Я хотел бы прямо с ней работать чтобы не писать лишние строки кода. Возможно я ошибаюсь и в данном случае php.ini нужно проигнорировать. Стоит ли пытаться исправить это или лучше использовать date_default_timezone_set?
FanatPHP, документация говорит что date_default_timezone_set задает временную зону. Но тогда зачем в php.ini стоит date.timezone?
Вместо использования этой функции, вы можете воспользоваться INI-настройкой date.timezone для установки временной зоны по умолчанию.
FanatPHP, я все равно не понимаю. Здесь написано: «Вместо использования этой функции, вы можете воспользоваться INI-настройкой date.timezone для установки временной зоны по умолчанию.»
Тогда вопрос. Если не задавать date_default_timezone_set, то по умолчанию временная зона должна быть равна date.timezone или я неправильно понимаю? Однако временная зона становится абсолютной.nokimaro, Тогда вопрос. Если не задавать date_default_timezone_set, то по умолчанию временная зона должна быть равна date.timezone или я неправильно понимаю? Однако временная зона становится абсолютной.
Здесь написано: «Вместо использования этой функции, вы можете воспользоваться INI-настройкой date.timezone для установки временной зоны по умолчанию.»
Php date отображает не верное время
Нужно чтобы ссылка переносила на след страницу, если введено верное число в input, а если не верное, то выводил alert.
Нужно чтобы ссылка переносила на след страницу, если введено верное число в input, а если не.date() выводит неправильное время.
Здравствуйте,подскажите пожалуйста почему на странице выводится все правильно кроме часов <html>.Загвоздка с Date (сохранить время)
Извините за примитивный вопрос, но на ровном месте получаю непонятные ошибки: Не могу внести.БД SQL: поле типа DATE не сохраняет время
Использую БД Oracle 9.2, СУБД SQL Navigator 5.5. Ну и Visual Studio 2010 Непонятный момент в том.date_default_timezone_set("UTC");
1 date_default_timezone_set("UTC");
Всё также +1 час показывает
Добавлено через 36 минут
Видимо из-за перевода на зимнее время, а в России отменили перевод часовНапрашивается вопрос как отключить в денвере перевод на зимнее время ?
В PHP есть встроенная база данных времени. В ней содержится отношение зона+текущее время по UTC+текущее смещение от UTC. То есть она знает, что 27-го марта в Москве летнее время. А знает она потому, что создана была достаточно давно.
Проблема усугубляется тем, что эта база вкомпилена в PHP, а PHP ветки 5.2 больше не поддерживается и обновлений для него не будет (емнип, обновление этой БД, затрагивающее МСК было осенью 2011-го, а PHP 5.2.17 вышел ещё весной).
Варианты решения:
1. можно попробовать найти более-менее новое расширение timezone (не уверен, что для windows оно есть — в некоторых юниксах есть в репозитории). Можно попробовать начать от сюда: http://pecl.php.net/package/timezonedb
2. пересобрать PHP, взяв новую версию ext/date/lib/timezone*.*
3. самое лучшее (хотя и не всегда возможно сделать быстро) обновить PHP.Разобрался, просто (Денвер) виноват в этом, установил вместо него (Open Server 5.2.2) и проблема решилась сама с собой.
PHP. Выводит неправильное время
include(‘connectsql.php’);
header(«Location: http://calc/allarticls.php»);
date_default_timezone_set(‘UTC’);
$title = $_POST[‘titleaf’];
$introtext = $_POST[‘introtexta’];
$description = $_POST[‘descaf’];
$date = getdate();
$tdate = $date[‘year’] . «-» . $date[‘mon’] . «-» . $date[‘mday’];
$ttime = date(‘H:i’);
function add($title, $introtext, $description, $date, $time) $querydb = mysql_query(«INSERT INTO articlet(title, introtext, description, date, time) VALUES (‘».$title.»‘, ‘».$introtext.»‘,'».$description.»‘, ‘».$date.»‘, ‘».$time.»‘)»);
print_r(mysql_error());
>
if(isset($_POST[‘sendaf’])) add($title, $introtext, $description, $tdate, $ttime);
>
?>Насколько я понимаю — хотя сам на данном языке не писал — ты процедурой date_default_timezone_set устанавливаешь зону времени. UTC без смещения — Это Лондон. То есть тебе надо нарисовать UTC+4 — если у тебя 4 часа разницы
Можно ли как-то настроить время что бы оно автоматически настраивалось в зависимости в какой стране юзер?? Через $_SERVER нужно получать данные??
Сдается, что часовой пояс у вас московский.
Это делает -4,
date_default_timezone_set(‘UTC’);
а должно быть -3, потому что php у вас, вероятно, необновленный.
В общем, убрать её, тогда будет то, что определено по умолчанию в php.ini.Да, также туда кроме UTC можно пихать типо europe/че-то там. Но советую ставить лондонское время, у меня просто mysql сервер по лондонскому работает и его не сменить, а пхп меняется.
Aljebro Просветленный (27074) Криво, значит, у вас все настроено. А вешать любую обработку timezone на mysql в жизни бы не стал. Работаем всегда в UTC, в базе храним независимо, тоже в UTC. Для большей надежности сохраняем дату и время внесения события пользователем (это паранойя, но полезная) Выводим в часовом поясе конкретного пользователя.
Можно ли как-то настроить время что бы оно автоматически настраивалось в зависимости в какой стране юзер?? Через $_SERVER нужно получать данные??
Aljebro Просветленный (27074) Нет, автоматически нельзя. Можно угадывать страну по IP, используя соответствующие базы или помнить настройки конкретного пользователя.