Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
?>