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