Page 1 of 1

Format a date

Posted: Sat Aug 20, 2005 1:55 pm
by Faster The Chase
ok im parsing an RSS feed and it returns a great big nasty date code i want to make pretty

2005-08-20T18:06:06+00:00 is what it returns and i want to make that just appear as the date and time e.g. 20/08/2005 18:06 problem is its also an hour out so could i format it to the user's timezone due to daylight saving and stuff

Cheers

Posted: Sat Aug 20, 2005 2:01 pm
by Faster The Chase
also theres a big T in the middle of the date - is that meant to be there?

Posted: Sat Aug 20, 2005 4:19 pm
by feyd
the T is supposed to be there. If you look down the list of parameters for date(), you'll notice the one for 'c' which will output that very timestamp format.

strtotime() may convert it to a timestamp for you, but it may not. I remember a thread that involved this format a while ago... but I can't recall the context to find it...

Posted: Sat Aug 20, 2005 9:28 pm
by raghavan20
2005-08-20T18:06:06+00:00

you can use the split function, use "-" as the first separator
use array elements, element[0], element[1], extract first two chars of element[2]
use element[2], find the position of ":", extract two chars before that position and repeat the sam totally thrice.

or you might have to use regex.

I hope you would crack it :)

Posted: Sun Aug 21, 2005 7:45 am
by timvw

Code: Select all

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

?>