Преобразование времени и частей времени в метку времени 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

Теги:
времени, stamp, gmmktime, mktime, print, future, strftime, метку, функцию, четыре, функции, части, 2012 , поэтому, функцией, обратно, возвращают, время, частей, эпохе, получения, 2002 , относятся, отстает, March, метка, компьютере, момент, содержит, 1028768021 , 1338823500 , строку, примере, получаем, следующем
Добавлено: 20 Июля 2018 21:38:43 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...