| 1 |
<?php |
|---|
| 2 |
/* |
|---|
| 3 |
* Project: MagpieRSS: a simple RSS integration tool |
|---|
| 4 |
* File: rss_utils.inc, utility methods for working with RSS |
|---|
| 5 |
* Author: Kellan Elliott-McCrea <kellan@protest.net> |
|---|
| 6 |
* Version: 0.51 |
|---|
| 7 |
* License: GPL |
|---|
| 8 |
* |
|---|
| 9 |
* The lastest version of MagpieRSS can be obtained from: |
|---|
| 10 |
* http://magpierss.sourceforge.net |
|---|
| 11 |
* |
|---|
| 12 |
* For questions, help, comments, discussion, etc., please join the |
|---|
| 13 |
* Magpie mailing list: |
|---|
| 14 |
* magpierss-general@lists.sourceforge.net |
|---|
| 15 |
*/ |
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
/*======================================================================*\ |
|---|
| 19 |
Function: parse_w3cdtf |
|---|
| 20 |
Purpose: parse a W3CDTF date into unix epoch |
|---|
| 21 |
|
|---|
| 22 |
NOTE: http://www.w3.org/TR/NOTE-datetime |
|---|
| 23 |
\*======================================================================*/ |
|---|
| 24 |
|
|---|
| 25 |
function parse_w3cdtf ( $date_str ) { |
|---|
| 26 |
|
|---|
| 27 |
# regex to match wc3dtf |
|---|
| 28 |
$pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/"; |
|---|
| 29 |
|
|---|
| 30 |
if ( preg_match( $pat, $date_str, $match ) ) { |
|---|
| 31 |
list( $year, $month, $day, $hours, $minutes, $seconds) = |
|---|
| 32 |
array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]); |
|---|
| 33 |
|
|---|
| 34 |
# calc epoch for current date assuming GMT |
|---|
| 35 |
$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); |
|---|
| 36 |
|
|---|
| 37 |
$offset = 0; |
|---|
| 38 |
if ( $match[10] == 'Z' ) { |
|---|
| 39 |
# zulu time, aka GMT |
|---|
| 40 |
} |
|---|
| 41 |
else { |
|---|
| 42 |
list( $tz_mod, $tz_hour, $tz_min ) = |
|---|
| 43 |
array( $match[8], $match[9], $match[10]); |
|---|
| 44 |
|
|---|
| 45 |
# zero out the variables |
|---|
| 46 |
if ( ! $tz_hour ) { $tz_hour = 0; } |
|---|
| 47 |
if ( ! $tz_min ) { $tz_min = 0; } |
|---|
| 48 |
|
|---|
| 49 |
$offset_secs = (($tz_hour*60)+$tz_min)*60; |
|---|
| 50 |
|
|---|
| 51 |
# is timezone ahead of GMT? then subtract offset |
|---|
| 52 |
# |
|---|
| 53 |
if ( $tz_mod == '+' ) { |
|---|
| 54 |
$offset_secs = $offset_secs * -1; |
|---|
| 55 |
} |
|---|
| 56 |
|
|---|
| 57 |
$offset = $offset_secs; |
|---|
| 58 |
} |
|---|
| 59 |
$epoch = $epoch + $offset; |
|---|
| 60 |
return $epoch; |
|---|
| 61 |
} |
|---|
| 62 |
else { |
|---|
| 63 |
return -1; |
|---|
| 64 |
} |
|---|
| 65 |
} |
|---|
| 66 |
|
|---|
| 67 |
?> |
|---|