Преобразование времени и частей времени в метку времени UNIX

Задача
Необходимо определить, какая метка времени UNIX соответствует множеству частей времени и даты.

Решение
Если части времени и даты относятся к локальной временной зоне, то следует применять функцию mktime():

// 7:45:03 PM on March 10, 1975, local time
$then = mktime(19,45,3,3,10,1975);

Функция gmmktime(), если части времени и даты относятся к часовому поясу GMT:

// 7:45:03 PM on March 10, 1975, in GMT
$then = gmmktime(19,45,3,3,10,1975);

Для получения текущих времени и даты в локальной зоне или в зоне UTC никаких аргументов передавать не надо:

$now = mktime();
$now_utc = gmmktime();

Обсуждение
Функции mktime() и gmmktime() принимают части даты и времени (час, минуту, секунду, месяц, день, год, флаг DST) и возвращают соответствующую метку даты/времени эпохи UNIX. Компоненты рассматриваются функцией mktime(), как локальное время, а функция gmmktime() считает их датой и временем в зоне UTC. Для обеих функций седьмой аргумент, флаг DST (1, если DST учитывается, и 0, если нет) необязателен. Эти функции возвращают осмысленные результаты только для времени, принадлежащего эпохе UNIX.


Большинство систем хранят метку времени в 32-битном целом со знаком, поэтому «принадлежащее эпохе» означает время между 8:45:51 P.M. 13 декабря 1901 года UTC и 3:14:07 A.M. 19 января 2038 года UTC. В следующем примере переменная $stamp_now содержит метку времени в момент вызова функции mktime(), а переменная $stamp_future – метку времени для 3:25 P.M. 4 июня 2012 года:

$stamp_now = mktime();
$stamp_future = mktime(15,25,0,6,4,2012);
print $stamp_now;
print $stamp_future;
1028782421
1338837900

Обе метки времени могут быть переданы обратно в функцию strftime() для получения форматированной строки времени:

print strftime('%c',$stamp_now);
print strftime('%c',$stamp_future);
Thu Aug 8 00:53:41 2002
Mon Jun 4 15:25:00 2012

Приведенные выше вызовы функции mktime() были сделаны на компьютере, находящемся в зоне EDT (которая на четыре часа отстает от зоны GMT), поэтому, если вместо нее вызвать функцию gmmktime(), будет получена метка времени, на 14400 секунд (четыре часа) меньшая:

$stamp_now = gmmktime();
$stamp_future = gmmktime(15,25,0,6,4,2012);
print $stamp_now;
print $stamp_future;
1028768021
1338823500

Передавая эту, сгенерированную функцией gmmktime(), метку времени обратно в функцию strftime(), получаем форматированную строку времени, которая также отстает на четыре часа:

print strftime('%c',$stamp_now);
print strftime('%c',$stamp_future);
Wed Aug 7 20:53:41 2002
Mon Jun 4 11:25:00 2012

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Вывод на печать даты и времени в определенном формате
Выделение дат и времен из строк
Выработка высокоточного времени
Определение дня недели, месяца, года или номера недели в году
Определение разности между датами юлианского календаря

Вернуться в раздел: PHP / 3. Дата и время