root/magpierss/rss_utils.inc

Revision 1318, 2.0 kB (checked in by Andrew Dolgov <fox@bah.spb.su>, 2 years ago)

[project @ fix magpie w3cdtf parsing (closes #110)]

Line 
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[7]);
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[11] == '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 ?>
Note: See TracBrowser for help on using the browser.