topical media & game development

talk show tell print

mashup-delicious-10-freshtags-lib-rss-utils.inc / inc



  <?php
  /*
   * Project:     MagpieRSS: a simple RSS integration tool
   * File:        rss_utils.inc, utility methods for working with RSS
   * Author:      Kellan Elliott-McCrea <kellan@protest.net>
   * Version:     0.51
   * License:     GPL
   *
   * The lastest version of MagpieRSS can be obtained from:
   * http://magpierss.sourceforge.net
   *
   * For questions, help, comments, discussion, etc., please join the
   * Magpie mailing list:
   * magpierss-general@lists.sourceforge.net
   */
  
  /*======================================================================*\
      Function: parse_w3cdtf
      Purpose:  parse a W3CDTF date into unix epoch
  
      NOTE: http://www.w3.org/TR/NOTE-datetime
  \*======================================================================*/
  
  function parse_w3cdtf ( date_str ) {
      
      # regex to match wc3dtf
      pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";
      
      if ( preg_match( pat, date_str, match ) ) {
          list( year, month, day, hours, minutes, seconds) = 
              array( match[1], match[2], match[3], match[4], match[5], match[6]);
          
          # calc epoch for current date assuming GMT
          epoch = gmmktime( hours, minutes, seconds, month, day, year);
          
          offset = 0;
          if ( match[10] == 'Z' ) {
              # zulu time, aka GMT
          }
          else {
              list( tz_mod, tz_hour, tz_min ) =
                  array( match[8], match[9], match[10]);
              
              # zero out the variables
              if ( ! tz_hour ) { tz_hour = 0; }
              if ( ! tz_min ) { tz_min = 0; }
          
              offset_secs = ((tz_hour*60)+tz_min)*60;
              
              # is timezone ahead of GMT?  then subtract offset
              #
              if ( tz_mod == '+' ) {
                  offset_secs = offset_secs * -1;
              }
              
              offset = offset_secs; 
          }
          epoch = epoch + offset;
          return epoch;
      }
      else {
          return -1;
      }
  }
  
  ?>
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.