Задача такая:
Собрать с различных мест(сайтов) данные, которые имеют разные форматы времени(те 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, тут уже просто математика и немного логики.
Ине понравилась функция по переводу времени в любую зону 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.