Php сервер часовой пояс

Как управлять часовыми поясами в PHP

Изучите основы использования часовых поясов в PHP и как сделать лучший выбор из набора функций предлагаемых PHP.

В этой краткой статье мы объясним основы использования часовых поясов в PHP. Работы с часовыми поясами — важный навык для каждого программиста, работающего с веб-приложениями. Поскольку на протяжении многих лет PHP в основном использовался для веб-приложений, он имеет довольно простую, но всестороннюю поддержку часовых поясов.

Часовые пояса и PHP

Часовые пояса поддерживаются в PHP с версии 4. Но то, что начиналось как базовая реализация функции date_default_timezone_set() , быстро развилось в PHP 5 и 7 с введением классов DateTimeZone и DateTimeZoneImmutable .

DateTimeZoneImmutable — подкласс DateTimeZone позволяющий создавать часовые пояса, невосприимчивые к изменениям. Эта функция может быть очень полезна в ситуациях, когда нужно быть уверенным, что часовой пояс никогда не изменится.

Функция date_default_timezone_set() устанавливает часовой пояс по умолчанию, используемый всеми функциями времени/даты в данном скрипте. Эта функция позволяет настроить часовой пояс, но имеет очень небольшую степень детализации, что вынуждает использовать один и тот же часовой пояс в течении выполнения скрипта.

Читайте также:  Найти длину вектора python

Классы DateTimeZone и DateTimeZoneImmutable привнесли больше контроля и гибкости в работу с часовыми поясами. Теперь мы можем получить доступ ко всем видам информации о часовом поясе, а также к нескольким экземплярам разных часовых поясов в одном скрипте.

Использование в PHP часовых поясов

Использование date_default_timezone_set()

 
date_default_timezone_set('Europe/Moscow');

Часовые пояса в методе date_default_timezone_set() всегда определяются в форматах Континент/город или Континент/Страна/Город . Полный список часовых поясов поддерживаемых в PHP, вы можете найти по ссылке

Это установит часовой пояс в часовой пояс переданный в качестве аргумента. После того как мы установили часовой пояс, можно использовать такие функции, как date_default_timezone_get() или любые другие функции, связанные со временем, такие как date() , для доступа к информации о новом часовом поясе.

Использование класса DateTimeZone

Лучшим способом использования часовых поясов в PHP является использование класса DateTimeZone . Это означает, что у нас есть доступ к большему количеству функций для доступа к информации и управления часовыми поясами, и мы можем создавать несколько экземпляров класса, что позволяет работать с несколькими часовыми поясами:

 
$timezone = new DateTimeZone('Asia/Novosibirsk');
$datetime = new DateTime($date, $timezone);
echo $datetime->format('Y-m-d H:i:s');

В этом примере мы создаём новый объект DateTimeZone и передаём его новому экземпляру DateTime . Затем объект DateTime будет использовать информацию из объекта DateTimeZone . Наконец, мы используем функцию format() для вывода даты в предпочтительном формате.

Заключение

Как вы видели, работать с часовыми поясами в PHP довольно просто. Убедитесь, что выбрали лучший способ для своего варианта использования, и PHP вам поможет!

Источник

How to set timezone with PHP easily (multiple methods)

Short guide on how to set the timezone using PHP using multiple methods.

PHP101.net - How to set timezone with PHP

Quick solution

The easiest way to set timezone with PHP is by the date_default_timezone_set() function. This function sets the default timezone used by all date/time functions in PHP. For example, to set the timezone to Asia/Hong_Kong :

date_default_timezone_set('Asia/Hong_Kong');

For a full list of supported timezones, check the official PHP.net Documentation timezone list. That is how to set timezone with PHP. For more methods and examples, please check the rest of the article.

Set timezone with PHP functions

Set timezone with PHP using date_default_timezone_set

date_default_timezone_set(string $timezoneId): bool

Where $timezoneId is the string of the timezone to be set. The function will return true if the timezone is valid, else it will return false. Tips: To get the current timezone that is set in PHP configuration, use date_default_timezone_get function:

echo date_default_timezone_get(); // returns the configured timezone

Set timezone with PHP using DateTime

Another method to set timezone with PHP is by object-oriented way using the DateTime object and the DateTimeZone class. The major difference here is the timezone will be set only per created object. Therefore, this method can be used when you want to have multiple variables with multiple timezones, or if the timezone is interchangeable. For example, we want to have two DateTime object with different timezones:

$dateHongKong = new DateTime('2023-01-01', new DateTimeZone('Asia/Hong_Kong')); echo $dateHongKong->format('Y-m-d H:i:sP'); // 2023-01-01 00:00:00+08:00 $dateJapan = new DateTime('2023-01-01', new DateTimeZone('Asia/Tokyo')); echo $dateJapan->format('Y-m-d H:i:sP'); // 2023-01-01 00:00:00+09:00

Another example is a single DateTime object that can have its timezone updated with DateTime::setTimezone() :

// Hong Kong timezone $date = new DateTime('2023-01-01', new DateTimeZone('Asia/Hong_Kong')); // Change to Japan timezone $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); 

Set timezone with PHP using ini_set

We can also modify timezone configuration dynamically using ini_set function to modify the date.timezone configuration variable:

ini_set('date.timezone', 'America/New_York');

Set timezone using server-side configuration

  • In php.ini file, look for the [Date] section;
  • Uncomment the date.timezone configuration line by removing the ; sign at the beginning of the line;
  • Input the desired timezone after the = sign.
. [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Japan . 

Remember to restart the web server after changing the setting in php.ini .

Final thoughts

These are the methods to set timezone with PHP using multiple methods. We hope these methods are helpful to you, and that they can be utilized in many use cases.

You might also like

References

Источник

date_timezone_set

The procedural version takes the DateTime object as its first argument.

Parameters

Procedural style only: A DateTime object returned by date_create() . The function modifies this object.

A DateTimeZone object representing the desired time zone.

Return Values

Returns the DateTime object for method chaining. The underlaying point-in-time is not changed when calling this method.

Examples

Example #1 DateTime::setTimeZone() example

$date = new DateTime ( ‘2000-01-01’ , new DateTimeZone ( ‘Pacific/Nauru’ ));
echo $date -> format ( ‘Y-m-d H:i:sP’ ) . «\n» ;

$date -> setTimezone (new DateTimeZone ( ‘Pacific/Chatham’ ));
echo $date -> format ( ‘Y-m-d H:i:sP’ ) . «\n» ;
?>

$date = date_create ( ‘2000-01-01’ , timezone_open ( ‘Pacific/Nauru’ ));
echo date_format ( $date , ‘Y-m-d H:i:sP’ ) . «\n» ;

date_timezone_set ( $date , timezone_open ( ‘Pacific/Chatham’ ));
echo date_format ( $date , ‘Y-m-d H:i:sP’ ) . «\n» ;
?>

The above examples will output:

2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45

See Also

  • DateTimeImmutable::setTimezone() — Sets the time zone
  • DateTime::getTimezone() — Return time zone relative to given DateTime
  • DateTimeZone::__construct() — Creates new DateTimeZone object

User Contributed Notes

Источник

Оцените статью