Php проверить часовой пояс

Функции даты и времени

date — форматирует вывод системной даты и времени
time — возвращает текущую метку системного времени Unix
date_default_timezone_get — возвращает временную зону, используемой по умолчанию всеми функциями даты и времени в скрипте
date_default_timezone_set — устанавливает временную зону по умолчанию для всех функций даты и времени в скрипте
getdate — возвращает информацию о дате и времени
strtotime — преобразует текстовое представление даты на английском языке в метку времени Unix
mktime — возвращает метку времени Unix для заданной даты
microtimee — возвращает текущую метку времени Unix с микросекундами

Класс DateTime — позволяет работать с датой и временем как с объектом

date_create — псевдоним DateTime::__construct()
date_format — псевдоним DateTime::format()
date_add — псевдоним DateTime::add()
date_interval_create_from_date_string — псевдоним DateInterval::createFromDateString()

date

Функция date — выводит текущую дату и время в нужном нам формате.
Возвращает строку, отформатированную в соответствии с указанным шаблоном format .
Необязательным параметром — используется метка времени, заданная аргументом timestamp , или текущее системное время, если timestamp не задан. То есть, если мы не задаем второй параметр, используется вызов функции time() .

Параметры форматирования в руководстве: php.net

date ( $format , $timestamp = time ());

time

Функция time — возвращает количество секунд, прошедших с начала эпохи Unix ( 1 января 1970 00:00:00 GMT ) до текущего времени.

echo date ( ‘Y-M-d H:i:s’ );
// выведет текущее время
echo ‘
‘ ;

Читайте также:  Reading pdf in php

echo date ( ‘Y-m-d H:i:s’ , time ());
// — тоже выведет текущее время
echo ‘
‘ ;

echo date ( ‘Y-m-d H:i:s’ , 0 );
// выведет: 1970-01-01 03:00:00 (3 часа — это разница часового пояса)
echo ‘
‘ ;

echo date ( ‘Y-m-d H:i:s’ , 1 );
// выведет: 1970-01-01 03:00:01 (прибавит к дате начала эпохи Unix одну секунду )
echo ‘
‘ ;

echo date ( ‘Y-m-d H:i:s’ , time () + 60 );
// прибавляет к текушей дате одну минуту
echo ‘
‘ ;

echo date ( ‘Y-m-d H:i:s’ , time () + 60 * 60 );
// прибавляет к текушей дате один час
// таким образом можно получить любую дату, как будующую, так и прошедшую
echo ‘
‘ ;

echo ‘2010 — ‘ . date ( ‘Y’ );
// выведет: 2010-2019

date_default_timezone_get

date_default_timezone_get — эта функция пытается получить временную зону по умолчанию,
то есть узнать, какой часовой пояс используется, по порядку следующими способами:
— чтение настройки временной зоны с помощью функции date_default_timezone_set() (если применимо);
— чтение значения ini -настройки date.timezone (если задана);
— если ни один из способов не принес результата, date_default_timezone_get () вернет временную зону UTC.
Получение временной зоны по умолчанию:

echo date_default_timezone_get ();
// выведет: Europe/Moscow
?>

date_default_timezone_set

date_default_timezone_set — от работы этой функции зависят все прочие функции даты и времени, перед использованием функциий, например, все той же date , необходимо установить нужный нам часовой пояс с помощью функции date_default_timezone_set . C помощью этой функции можно настроить нужный нам часовой пояс, передав параметром временную зону. Список поддерживаемых временных зон: php.net

getdate

getdate — эта функция позволяет получить дату в виде массива, при этом каждая из составляющих частей даты будет разбита на элементы ассоциативного массива. Индексы возвращаемого ассоциативного массива можно посмотреть здесь: php.net

// так как получаем массив, распечатываем с помощью print_r(),
print_r ( $date );
// либо var_dump()
var_dump ( $date );

// вывод элементов массива по отдельности
echo $date [ ‘year’ ];
// выведет: 2019
?>
— распечатка массива с помощью var_dump(): array (size=11) ‘seconds’ => int 59 ‘minutes’ => int 50 ‘hours’ => int 19 ‘mday’ => int 12 ‘wday’ => int 3 ‘mon’ => int 6 ‘year’ => int 2019 ‘yday’ => int 162 ‘weekday’ => string ‘Wednesday’ (length=9) ‘month’ => string ‘June’ (length=4) 0 => int 1560358259 2019

strtotime

strtotime — с помощью этой функции мы можем задавать время не в каких-то цифрах, но и в цифрах с применением текста на английском языке.
Описание:

strtotime ( $time , $now = time ())

Первым параметром функции должна быть строка с датой на английском языке, которая будет преобразована в метку времени Unix (количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC) относительно метки времени, переданной в now , или текущего времени, если аргумент now опущен.

echo strtotime ( «+1 day» ); // выведет некое количество секунд
echo ‘
‘ ;

// с помощью функции date, указав ей необходимые параметры,
// преобразовываем это количество секунд к понятной нам дате
echo date ( ‘Y-m-d H:i:s’ , strtotime ( «+1 day» )); // дата плюс один день
// выведит: дату завтрашнего дня
echo ‘
‘ ;

echo date ( ‘Y-m-d H:i:s’ , strtotime ( «+1 day 2 hours» ));
// выведит: дату завтрашнего дня плюс два часа
?>

mktime

mktime — работа этой функции похожа на работу функции time (), а так же позволяет прибавлять в более понятной нам форме нужное количесто лет, нужное количество дней и т. д.
Список параметров смотреть здесь: php.net
Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты и времени.

Пример:
Выведем текущую временную метку с помощью функции time () и с помощью функции mktime ().

echo mktime ( date ( «H» ), date ( «i» ), date ( «s» ), date ( «m» ), date ( «d» ), date ( «Y» ));
echo ‘
‘ ;

echo mktime ( date ( «H» ), date ( «i» ), date ( «s» ) + 1 , date ( «m» ), date ( «d» ), date ( «Y» ));
// результат в третьем случае будет на одну секунду больше
?>

Выведет:
1560360383
1560360383
1560360384 — результат в третьем случае будет на одну секунду больше

— в двух случаях получаем один и то же результат
— но в случае с mktime() мы можем прибавлять числа к той или иной части даты, напимер, прибавим одну секунду: date(«s»)+1 . Результат в третьем случае будет на одну секунду больше.

Пример использования mktime ():
В переменную $st поместим текущую дату и прибавим к ней один год: date(«Y»)+1 . Выведем эту дату с помощью функции date() в нужном нам формате: ‘Y-m-d H:i:s’ и вторым параметром передаем временную метку, которую мы получили выше: $st .

$st = mktime ( date ( «H» ), date ( «i» ), date ( «s» ), date ( «m» ), date ( «d» ), date ( «Y» )+ 1 );
echo date ( ‘Y-m-d H:i:s’ , $st );
// в результате получаем дату следующего года
?>
Выведет:
2020-06-12 20:38:06

microtime

microtime — эта функция возвращает текущую метку времени Unix с микросекундами. Эта функция доступна только на операционных системах, в которых есть системный вызов gettimeofday() .
Данная функция позволяет замерять время выполнения скрипта.
Перед началом выполнения скрипта запускается функция microtime (), результат ее работы возвращается в какую — нибудь переменную, например — $start , и после последней выполненной строчки кода, запускается еще раз эта функция microtime (), результат ее возвращается в переменную $end . Далее получаем разницу ( $end — $start ) — это и будет время выполнения скрипта в секундах.

// возвращает текущую метку системного времени Unix
echo time ();
echo ‘
‘ ;

// возвращает текущую метку времени Unix с микросекундами
echo microtime ();
var_dump ( microtime ()); // по умолчанию получаем — string
var_dump ( microtime ( true )); // получим — float
echo ‘
‘ ;

// время выполнения скрипта
$start = microtime ( true );
// функция usleep — откладывает выполнение скрипта на микросекунды
usleep ( 100 );

$end = microtime ( true );
echo $end — $start ;
echo ‘
‘ ;

// время перебора счетчика
$start = microtime ( true );
for ( $i = 1 ; $i if ( $i == 100000 ) echo ‘

Отчет завершен

‘ ;
>
$end = microtime ( true );
echo $end — $start ;
?>

0.17640000 1560361954
string ‘0.17640000 1560361954’ (length=21)
float 1560361954.1764

Отчет завершен
0.017999887466431

Класс DateTime

Класс DateTime — позволяет работать с датой и временем как с объектом.
Класс — это набор свойств и методов. Свойства — это ни что иное как переменные в классе, а методы — это ни что иное как функции в классе.

date_create

date_create — эта функция является псевдонимом конструктора класса: DateTime::__construct() и создает объект даты-времени, с которым мы можем дальше работать, то есть для которого мы можем вызывать в дальнейшем какие-то методы или функции.
Для данной функции необходимо передать просто параметр даты, например: год, месяц, число. И внутри нее мы можем вызвать знакомую функцию date () и передать нужную нам дату.

// создадим переменную $date и для нее вызовим функцию date_create() и,
// в качестве параметра, передадим дату: ‘2016-05-24’
$date = date_create ( ‘2016-05-24’ );
// — echo $date; — вызовет ошибку: объект класса DateTime невозможно
// конвертировать в строку, потому что, $date — объект .

print_r ( $date );
var_dump ( $date );
?>

Функция print_r($date) выведет:
DateTime Object ( [date] => 2016-05-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Moscow )

Функция var_dump($date) выведет:
object(DateTime)[1]
public ‘date’ => string ‘2016-05-24 00:00:00.000000’ (length=26)
public ‘timezone_type’ => int 3
public ‘timezone’ => string ‘Europe/Moscow’ (length=13)

date_format

date_format — эта функция является псевдонимом: DateTime::format ().
Она преобразует дату к нужному нам формату, то есть показать в удобочитаемой форме нам данный объект.

$date = date_create ( date ( ‘Y-m-d H:i:s’ ));
echo date_format ( $date , ‘Y-m-d H:i:s’ );
?>

date_add

date_add — эта функция является псевдонимом: DateTime::add() .

Она позволяет прибавлять что-то к дате (часы, минуты, секунды и т. д.).

date_interval_create_from_date_string

date_interval_create_from_date_string — эта функция является псевдонимом: DateInterval::createFromDateString ().

Она позволяет прибавлять удобочитаемые интервалы к дате.

echo date_format ( $date , ‘Y-m-d H:i:s’ );
// — где $date — объект обработанный функцией date_create()

// первый параметр — объект $date,
// второй параметр — date_interval_create_from_date_string()
date_add ( $date , date_interval_create_from_date_string ( ‘2 days + 2hours + 10 minutes + 5 seconds’ ));
echo ‘
‘ ;

echo date_format ( $date , ‘Y-m-d H:i:s’ );
// где $date — объект обработанный функцией date_add()
?>

— выведет:
2019-06-12 21:26:20
2019-06-14 23:36:25

Источник

How to Detect User Timezone in PHP

Getting the user timezone can help your application in showing date and time relative to the user’s browser. This means that a user in New York will see time relative to America/New_York timezone, while a user in India will see time according to the Asia/Kolkata timezone.

Another use-case can be using the user’s timezone to create an event on his behalf with Calendar APIs such as that of Google and Outlook. The user can choose a time from the frontend, and in the backend the application creates an event at that time, using the browser’s timezone. It should be noted that all Calendar APIs need a timezone to create an event.

Detecting the User Timezone Name

Detecting the user timezoone is a two-step process:

  1. Get the timezone offset of the browser with Javascript, and sent it to PHP (via AJAX or something).
  2. Convert the timezone offset to a valid TZ Database timezone name such as America/New_York , Asia/Kolkata .

1) Getting the Browser Timezone Offset

Javascript has a getTimezoneOffset method which gives timezone difference, in minutes, from current local time to UTC. We need to pass this offset to the server.

It should be noted that getTimezoneOffset returns an offset which is positive if the local timezone is behind UTC and negative if it is ahead. So we must add an opposite sign (+ or -) to the offset.

var timezone_offset_minutes = new Date().getTimezoneOffset(); timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes; // Timezone difference in minutes such as 330 or -360 or 0 console.log(timezone_offset_minutes); 

2) In PHP, Convert Timezone Offset in Minutes to a Timezone Name

You can get the timezone name from timezone offset in minutes through the timezone_name_from_abbr function.

// This is just an example. In application this will come from Javascript (via an AJAX or something) $timezone_offset_minutes = 330; // $_GET['timezone_offset_minutes'] // Convert minutes to seconds $timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false); // Asia/Kolkata echo $timezone_name; 

Now when you get the timezone name, you can get date and time relative to the user’s timezone :

date_default_timezone_set($timezone_name);

Demo

Click on the button below to see the name of your current timezone :

Источник

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