18.12.2008

Время в разных зонах GMT (php)

Задача такая:
Собрать с различных мест(сайтов) данные, которые имеют разные форматы времени(те GMT -5,  GMT -3, CET, ну и другие). Для каждого источника пришлось писать профиль, что бы в базу добавлять унифицированные данные, так как они несколько различаются между собой, те есть часть обязательных полей(время, название) и дополнительные (описание, примечание , призы  и т.д.).  Так вот,  извлекаем время, получается например так: 
Monday  10  00:45
Маловато будет для перевода в Unix timestamp  (.  Нужен еще год, пришлось подставлять самому, в принципе год не можно и самому посчитать :) , вот  если нет числа месяца, а только день недели и время, тогда я в тупике. Берем строчку которая получилась и добавляем еще временную зону
GMT(UTC), в данном случае GMT-5:
Monday  10  00:45  2008 -0500
и переводим в секунды Unix timestamp :
strtotime('Monday  10  00:45  2008 -0500') ;


все GNU форматы , которые понимает php strtotime смотрим здесь:  Date input formats
Например:

1972-09-24     # ISO 8601.
72-9-24        # Assume 19xx for 69 through 99,
               # 20xx for 00 through 68.
72-09-24       # Leading zeros are ignored.
9/24/72        # Common U.S. writing.
24 September 1972
24 Sept 72     # September has a special abbreviation.
24 Sep 72      # Three-letter abbreviations always allowed.
Sep 24, 1972
24-sep-72
24sep72

и т.д.

Так, забили базу разными секундами, теперь их надо вывестит в удобочитаемом виде, типа:

March 10, 2008, 5:16 pm

Но с учетом опять же зоны GMT, тут уже просто математика и немного логики.  

Ине понравилась функция по переводу времени в любую зону :

function unixtimestamp_to_gmt( $timestamp, $format, $tz=0) {
$offset = 60 * 60 * $tz; // Seconds from GMT
$timestamp = $timestamp + $offset;
return gmdate($format, $timestamp);
}

Вобщем то все. To  be continued.

17.12.2008

Glossary

Unix timestamp - количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) до текущего времени

GMT - Greenwich Mean Time или GMT ( время по Гринвичу). Наверно
    самый распространенный формат IMHO.