Преобразование времени и частей времени в метку времени UNIX на PHP
Решение
Если части времени и даты относятся к локальной временной зоне, то следует применять функцию 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
Комментарии:
Комментариев нет
|
|
|