RSS나 ATOM의 날짜 UNIX timestamp으로 변환
보통 RSS나 ATOM에 날짜(시간)는 다음과 같은 형식 입니다.
Tue, 29 Sep 2009 09:38:44 +0900
2009-09-29T09:38:44+09:00
이런 값들을 다른 형식으로 표현 하기위해서 많이 쓰는 기준값이 UNIX timestamp 입니다.
아래는 위와 같은 형식의 값을 UNIX timestamp 으로 변환해보는 함수를 간략하게 만든 것입니다.
<?php
echo "Timestamp : ".parse_rssdate("2009-09-29T09:38:44+09:00")."<br />";
echo "Date : ".date("Y-m-d H:i:s",parse_rssdate("2009-09-29T09:38:44+09:00"))."<br />";
function parse_rssdate ( $date_str ) {
# regex to match wc3dtf
$pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";
if ( preg_match( $pat, $date_str, $match ) ) {
list( $year, $month, $day, $hours, $minutes, $seconds) =
array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]);
# calc epoch for current date assuming GMT
$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);
$offset = 0;
if ( $match[10] == 'Z' ) {
# zulu time, aka GMT
}
else {
list( $tz_mod, $tz_hour, $tz_min ) =
array( $match[8], $match[9], $match[10]);
# zero out the variables
if ( ! $tz_hour ) { $tz_hour = 0; }
if ( ! $tz_min ) { $tz_min = 0; }
$offset_secs = (($tz_hour*60)+$tz_min)*60;
# is timezone ahead of GMT? then subtract offset
#
if ( $tz_mod == '+' ) {
$offset_secs = $offset_secs * -1;
}
$offset = $offset_secs;
}
$epoch = $epoch + $offset;
}
else {
$epoch = strtotime($date_str);
}
return $epoch;
}
?>