- Установка временнОй зоны в PHP
- Установка временной зоны на виртуальном хостинге
- PHP | Дата и время
- Функция PHP date()
- Синтаксис
- Параметры функции date():
- PHP5 Дата и время
- PHP Функция date()
- Синтаксис
- PHP Получить простую дату
- Пример
- PHP Год авторского права
- Пример
- PHP Получить простое время
- Пример
- PHP Получить свой часовой пояс
- Пример
- PHP Создать метку времени
- Синтаксис
- Пример
- PHP Создать дату из строки
- Синтаксис
- Пример
- Пример
- Еще примеры дат
- Пример
- Пример
- PHP Полный справочник дат
- Работа с временными зонами в PHP
Установка временнОй зоны в PHP
Иногда возникает такая ситуация, что текущее время на сервере не соответствует вашему текущему часовому поясу или часовому поясу региона, на который ориентирован ваш сайт.
Чтобы было понятно, напомню: территориально Россия очень большая, и далеко не всем нужно, чтобы их сайты «жили» по московскому времени. Например, Урал, Сибирь, Дальний восток и т.д.
Серверы большинства популярных российских хостинг-провайдеров размещены на технологических площадках Москвы и Санкт-Петербурга и по-умолочанию настроены, естественно, на московскую временну́ю зону. Сервер не может автоматически подстраиваться под ваше текущее местоположение и переводить системные часы. В связи с чем, работа функций даты и времени на сайте может быть не совсем корректной. Естественно, сейчас речь не идёт о CMS, в которых поправка часового пояса обычно присутствует прямо в интерфейсе администратора.
В первую очередь проверьте текущее состояние с помощью PHP-кода:
Хорошо, если у вас свой сервер и имеется доступ к php.ini, где можно задать нужную временну́ю зону и забыть. Например, таким образом:
Правда, если на сервере размещены несколько проектов, в которых должны поддерживаться различные часовые пояса, тогда лучше этого не делать. В этом случае будет правильнее задать временные зоны только для проектов, где один часовой пояс.
Установка временной зоны на виртуальном хостинге
На виртуальном хостинге, доступа к конфигам сервера чаще всего нет. Поэтому, в первую очередь попробуйте задать временну́ю зону с помощью .htaccess. Просто найдите или создайте в корне своего сайта файл .htaccess и добавьте в него такую строку:
Если способ не сработает, тогда воспользуемся функцией date_default_timezone_set(), которая устанавливает временную зону по умолчанию для всех функций даты и времени. Для этого нужно где-нибудь в начале скрипта просто добавьте такую строку:
Естественно, Europe/Moscow меняется на необходимый вам часовой пояс. Для территории РФ в PHP поддерживаются следующие временные зоны:
- Europe/Moscow
- Europe/Samara
- Europe/Kaliningrad
- Europe/Volgograd
- Asia/Anadyr
- Asia/Kamchatka
- Asia/Krasnoyarsk
- Asia/Magadan
- Asia/Novokuznetsk
- Asia/Novosibirsk
- Asia/Omsk
- Asia/Sakhalin
- Asia/Vladivostok
- Asia/Yakutsk
- Asia/Yekaterinburg
Со списком всех доступных временных зон можно ознакомиться по ссылке или выполнить команду, которая возвратит вам список временных зон, доступных на вашем сервере.
Делаю сайты на Вордпресс с 2008 года, занимаюсь их оптимизацией, поддержкой, делюсь опытом в блоге
Источник
PHP | Дата и время
В этом уроке рассмотрм, как на практике использовать функции PHP по получению даты и времени, а также рассмотрим способы вывода и форматирования даты и времени. Функции PHP, обрабатывающие дату и время, позволяют получать дату и время с того сервера, на котором выполняется сценарий. Также эти функции позволяют нам редактировать и форматировать полученные временные значения перед их отображением (выводом) на экран.
Функция PHP date()
Функция date() выводит текущие дату и время в заданном формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат.
Синтаксис
Параметры функции date():
Функция date() возвращает строку, которая отформатирована в соответствии с указанным шаблоном format . Параметр timestamp задает метку времени. Если timestamp не задан, тогда используется текущее системное время.
Примечание: Отметка времени — это последовательность символов, обозначающая дату и / или время, когда произошло определенное событие.
Обязательный параметр format функции date() указывает, как форматировать дату (или время). Формат задается управляющими командами (латиницей), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Ниже представлена таблица с расшифровкой некоторых символов в строке format :
| Символ в строке format | Описание | Пример возвращаемого значения |
|---|---|---|
| День | — | — |
| d | День месяца с 2-мя цифрами | от 01 до 31 |
| D | День недели в текстовом формате, 3 символа | от Mon до Sun |
| z | Порядковый номер дня в году (начиная с 0) | От 0 до 365 |
| Месяц | — | — |
| F | Полное название месяца, например, January или March | от January до December |
| m | Порядковый номер месяца, 2 цифры | от 01 до 12 |
| M | Сокращенное название месяца, 3 символа | от Jan до Dec |
| Год | — | — |
| Y | Порядковый номер года, 4 цифры | Примеры: 1999, 2019 |
| y | Порядковый номер года, 2 цифры | Примеры: 99, 19 |
| Время | — | — |
| a | Ante meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистре | am или pm |
| A | Ante meridiem или Post meridiem в верхнем регистре | AM или PM |
| g | Часы в 12-часовом формате | от 1 до 12 |
| G | Часы в 24-часовом формате | от 0 до 23 |
| h | Часы в 12-часовом формате | от 01 до 12 |
| H | Часы в 24-часовом формате, 2 цифры | от 00 до 23 |
| i | Минуты, 2 цифры | от 00 до 59 |
| s | Секунды, 2 цифры | от 00 до 59 |
Ниже представлены некоторые примеры получения фактической информации о дате и времени:
Источник
PHP5 Дата и время
Функция PHP date(), используется для форматирования даты и/или времени.
PHP Функция date()
Функция date() , форматирует метку времени для более читаемых даты и времени.
Синтаксис
| Параметры | Описание |
|---|---|
| Формат | Обязательно. Задает формат метки времени |
| Метка времени | Необязательно. Задает метку времени. По умолчанию — текущая дата и время |
Временная метка — это последовательность символов, обозначающие дату и/или время, когда произошло определенное событие.
PHP Получить простую дату
Необходимый параметр формат функции date() определяет, как форматировать дату (или время).
Вот некоторые символы, которые обычно используются для дат:
- d — Представляет день месяца (01 до 31)
- m — Представляет месяц (01 до 12)
- Y — Представляет год (из четырех цифрах)
- l — Представляет день недели
Другие персонажи, например «/» , «.» , или «-» также могут быть вставлены между символами для добавления дополнительного форматирования.
Пример ниже, форматирует сегодняшнюю дату тремя различными способами:
Пример
PHP Год авторского права
Функция date() , автоматического обновления года авторского права вебсайта:
Пример
PHP Получить простое время
Вот некоторые символы, которые обычно используются для времени:
- h — 12-часовой формат с ведущими нулями (01 до 12)
- i — Минуты с ведущими нулями (00 до 59)
- s — Секунды с ведущими нулями (00 до 59)
- a — В нижнем регистре до полудня и после полудня (am и pm)
В примере ниже выводится текущее время в указанном формате:
Пример
Обратите внимание, что PHP функция date() вернет текущую дату/время сервера!
PHP Получить свой часовой пояс
Если время, которое вы получили от кода не является правильным время, это, вероятно, потому, что ваш сервер находится в другой стране или настроить для другой часовой пояс.
Так, если вам нужно чтобы время было правильным согласно специфическому местоположению, можно использовать установку часового пояса.
В примере ниже задается часовой пояс «Россия/Пермь», затем, выводит текущее время в указанном формате:
Пример
PHP Создать метку времени
Необязательный параметр timestamp в функции date() задает метку времени. Если Вы не укажите метку времени, будет использоваться текущая дата и время (как показано в примеры выше).
Функция mktime() возвращает метку времени Unix для даты. Временная метка Unix содержит количество секунд между эпохой Unix (1 января 1970 00:00:00 GMT) и время уточняется.
Синтаксис
Пример ниже создает дату и время из нескольких параметров в функции mktime() :
Пример
PHP Создать дату из строки
Функция strtotime() , используется для преобразования читаемой строки в времени Unix.
Синтаксис
Пример ниже создает дату и время из функции strtotime() :
Пример
PHP довольно грамотно преобразовывает строку в дату, так что можно вставить в различные значения:
Пример
Однако, функция strtotime() не идеалена, поэтому не забудьте проверить строки, которые вы туда вставили.
Еще примеры дат
В приведенном ниже примере, выводятся даты для следующих шести суббот:
Пример
Пример ниже выводит количество дней до 4 июля:
Пример
PHP Полный справочник дат
Для полной справки всех функций даты, пройдите к нашему полному PHP Справочик дат.
Справочник содержит краткое описание и примеры использования для каждого функция!
Источник
Работа с временными зонами в PHP
Как только проект перестает быть завязан на ограниченное количество потребителей и растет география его применения, встает вопрос о применении временных зон. Когда я работал в одной известной интернет компании внедрение в работу временных зон (как в интерфейс отображения статистики, так и в программу анализа) было достаточно серьезным шагом.
Проблемы временных зон
- Большинство мест на земле имеют часовое смещение
- Некоторые места имеют получасовое или пятнадцати-минутное временное смещение
- В некоторых местах временная зона меняется в течении года
Проблемы перевода времени
- Множество стран переводит время дабы увеличить продолжительность светлой части суток
- Это делают не во всех странах
- Перевод часов происходит в разное время
- Существует большое количество исключений
Другие проблемы временных зон и «перевода стрелок»
- В Австралии зоны строго вертикальные
- В Бразилии дата, когда переводят срелки, меняется каждый год
- На остров Lord Howe (Австралия) переводят стрелки только на почаса
- Непал переводит стрелки на 15 минут
Проблемы в наименовании временных зон
- Одно именование может означать разные временные зоны:
Например:PST — Pacific Standart Time и Pakistan Standart Time
EST — Easten Standart Time (США), Easten Standart Time (Австралия) и Easten Brazil Standart Time - Одна зона может иметь несколько наименований
Более того, в разных операционных системах имена зон могут различаться.
Проблемы в представлении даты и времени
- Двусмысленность
06/08/04
6 Августа 2004 года
8 Июня 2004 года
4 Августа 2006 - Нечитаемость
20040425010541
25 Апреля 2004 года 01:05:41 - Другие «магические» форматы
third saturday
2004-03-10 16:33:17.11403+1
2001-11-29T13:20:01.123-05:00
23:41:00.0Z
04:05:07.789 +0930
1999.238
Функции в php 4 и php 5 для работы с временем и датами
- checkdate — Проверяет правильность даты по грегорианскому календарю
- date(gmdate) — Форматирует системную дату/время (по Гринвичу)
- getdate — Возвращает информацию о дате/времени
- gettimeofday — Возвращает текущее время
- localtime — Возвращает системное время
- mktime(gmmktime) — Возвращает метку времени для заданной даты (по Гринвичу)
- strftime(gmstrftime) — Форматирует дату/время с учетом текущей локали (по Гринвичу)
- strtotime — Преобразует текстовое представление даты на английском языке в метку времени Unix
Ограничения работы с датами
- Использование Unix-таймстампа в качестве базы (количество секунд, прошедшее с 1 января 1970 года по Гринвичу)
- Таймстамп представляется ввиде 32-битного целого, что ограничивает использование данного представления диапазоном 1902-2038 годами
- На многих операционных системах данный тип может быть только положительным, ограничение диапазона 1970-2038
- strtotime — достачно сложная функция, реализация которой подвержена большим количеством ошибок
- Нет вариантов корректной работы с временными зонами
- Некоторые функции являются зависимыми от операционной системы
Улучшения работы с датами в php 5.1 и выше
- Использование 64-битного типа для хранения даты. Теперь граница интервала использования данного типа 4 Декабря 292277026596 год
- Функция strtorime была переписана
- Больше нет зависимости в реализации от операционной системы
- Полная поддержка временных зон, перевода часов и модификаторов дат
- Новый формат модификаторов временных зон
- Более продвинутые функции для работы с датами
Форматы данных в php 5.1 и выше
Американский формат: 9/11;4:08 pm;12/22/78; 8:51:00 am
Комбинированный формат: Sat, 24 Apr 2004 21:48:40 +0200; 2001-11-29T13:20:01.123-05:00
Описательный формат: tomorrow; four months ago; last saturday; +20 days 2 hours
Текстовый формат: December 22. 1978; 22-december-1978
Все ISO 8601 форматы: 1978/12/22; 13:03:12.45678; 13:03:12.45678 +0100; 15:57-8; 1978-12-22; 15:57:41 pdt; 13:03:12.45678 CEST; 231431 CEST; 70-4-25; 13:03 CEST; 04:05 -0930; 23:41F
Форматы баз данных: 1999-Jan-08; 1999.238
Поддержка временных зон в php 5.1 и выше
- Встроенная база на 551 временную зону
- Нет зависимости от аббревиатуры временной зоны
- Названия временных зон имеют формат — Continent/Location или Continent/Location/Sublocation
Поддержка временных зон. Как использовать?
- Каждая временная зона идентифицируется городом с наибольшим населением на данной территории
- Зоны разделены на 10 больших групп: Африка, Америка, Антарктика, Арктика, Азия, Европа, Индия, Тихий океан
- Существует также группа Другие, состоящая из вышедших из употребления названий и служащая для обеспечения обратной совместимости
- Больше информации по аббревиатурам временных зон по указанному адресу
Изменение информации по временным зонам
- Обновления информации по временным зонам происходят около 20 раз в год
- Большинство обновлений происходят неожиданно
- Чтобы не потерять актуальность, релизы php должны быть достаточно часты
- Расширение pecl, которое исправляет данные недостатки, называется timezonedb (pecl install timezonedb)
Разбор дат (прошлое)
Разбор строки с информации о дате и времени используя функцию strtotime
$date=strtotime(«2005-07-11 22:16:50 CEST»);
$ts=strtotime(«next week»,$date);
date_default_timezone_set(«Europe/Oslo»);
$ts=date_create(«1979-12-31 09:15»);
echo date_format($ts,«D Y-m-d H:i:s -\I\S\O \W/\Y: W/o»);
date_default_timezone_set(«Europe/Oslo»);
$ts=date_create(«December 22nd, 2005 15:41»);
echo date_format($ts, DATE_ISO8601);
echo date_format($ts, DateTime::RFC1036);
echo date_format($ts, DATE_RSS);
date_default_timezone_set(«Europe/Oslo»);
$ts=date_create(«December 22nd, 2005 15:41»);
$locales=array(‘en_US’,’fr_CA’,’nb_NO’,’ru_RU’,’ar_SA’,’ja_JP’);
foreach($locales as $locale)
<
locale_set_default($locale);
echo date_format_locale($ts,DATE_RFC2822).»\n»;
>
$date=new DateTime(‘now’);
echo $date->format(DateTime::ISO8601).»\n»;
$date->setTime(15,0,7);
echo $date->format(DateTime::ISO8601).»\n»;
$date->setDate(2006,12,22);
echo $date->format(DateTime::ISO8601).»\n»;
$date->setIsoDate(2006,45,2);
echo $date->format(DateTime::ISO8601).»\n»;
date_default_timezone_set(«Europe/Oslo»);
$date=new DateTime(‘now’);
echo $ts->format(DATE_RFC2822).»\n»;
$ts->modify(«+2 days»);
echo $ts->format(DATE_RFC2822).»\n»;
$ts->modify(«fifth month»);
echo $ts->format(DATE_RFC2822).»\n»;
$ts->modify(«Friday +3 weeks»);
echo $ts->format(DATE_RFC2822).»\n»;
$ts->modify(«next friday»);
echo $ts->format(DATE_RFC2822).»\n»;
date_default_timezone_set(«Europe/Oslo»);
$ts=date_create(«1978-12-22 09:15»);
echo $ts->format(‘e’);
$tz=new DateTimeZone(‘Pacific/Honolulu’);
$ts1=new DateTime(‘1978-12-22 09:15 CEST’,$tz);
$ts2=new DateTime(‘1978-12-22 09:15 Europe/Amsterdam’,$tz);
echo $ts2->format(DateTime::RFC2822);
$tz=timezone_open(‘Asia/Singapore’);
echo timezone_name_get($tz);
$tz=timezone_open(‘CEST’);
echo timezone_name_get($tz);
$tz=new DateTimeZone(»Europe/Amsterdam»);
$d=new DateTime(«2005-01-22 09:15»);
echo $tz->getOffset($d);
$d->modify(«+6 months»);
echo $tz->getOffset($d);
$tz1=timezone_open(‘Pacisic/Honolulu’);
$tz2=timezone_open(‘Europe/Amsterdam’);
$tz3=timezone_open(‘Australia/Melbourne’);
$ts=date_create(«1978-12-22 09:15»,$tz1);
echo $ts->getTimezone()->getName().’:’.$ts->format(DATE_RFC822).»\n»;
$ts->setTimezone($tz2);
echo $ts->getTimezone()->getName().’:’.$ts->format(DATE_RFC822).»\n»;
$ts->setTimezone($tz3);
echo $ts->getTimezone()->getName().’:’.$ts->format(DATE_RFC822).»\n»;
$tz=timezone_open(‘Europe/Amsterdam’);
$trs=timezone_transitions_get($tz); // или $trs=$tz->getTransitions();
foreach($trs as $ts)
printf(«%20s %7d %d %s\n»,$tr[‘time’],$tr[‘offset’],$tr[‘isdst’],$tr[‘abbr’]);
$ids = timezone_identifiers_list();
echo «Number of identifiers: ».count($ids).»\n»;
echo implode(«, «, array_slice($ids, 0, 5)).’. ‘.implode(«, «, array_slice($ids, -5));
$abbrs = timezone_abbreviations_list();
foreach ($abbrs as $abbr => $ids)
foreach ($ids as $id)
printf(«%-6s %6d %d %s\n», strtoupper($abbr),$id[‘offset’],$id[‘dst’], $id[‘timezone_id’]);
date_default_timezone_set(«America/New_york»);
$tz = new DateTimeZone(«America/New_york»);
foreach (timezone_transitions_get($tz) as $tr)
if ($tr[‘ts’] > time()) break;
$d = new DateTime( «@<$tr['ts']>» );
printf(«The timezone %s switches to %s on %s.\nThe new GMT offset will be: %d (%s)\n», $tz->getName(), $tr[‘isdst’]? «DST»: «standard time», $d->format(‘d M Y @ H:i T’), $tr[‘offset’], $tr[‘abbr’]);
Когда появится данная функциональность
В php 5.1 необходимо скомпилировать, используя флаг CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1
В php 5.2 и выше по умолчанию
Источник