770 |
florian |
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 |
?>
|