]>
Commit | Line | Data |
---|---|---|
19dee1dc AD |
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) = | |
67b9c19a | 32 | array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]); |
19dee1dc AD |
33 | |
34 | # calc epoch for current date assuming GMT | |
35 | $epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); | |
36 | ||
37 | $offset = 0; | |
67b9c19a | 38 | if ( $match[11] == 'Z' ) { |
19dee1dc AD |
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 | ?> |