note 65368 deleted from function.strtotime by derick

From: Date: Sun, 15 Jul 2007 12:39:05 +0000
Subject: note 65368 deleted from function.strtotime by derick
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-128556@lists.php.net to get a copy of this message
Note Submitter: francesco at pnpitalia dot it ---- modifies function of Jae Lee, this one support dates without separator like "20060401", it return a "string" not a "timestamp" <?php /** * Returns a formatted date from a string based on a given format * * Supported formats * * %Y - year as a decimal number including the century * %m - month as a decimal number (range 1 to 12) * %d - day of the month as a decimal number (range 1 to 31) * * %H - hour as decimal number using a 24-hour clock (range 0 to 23) * %M - minute as decimal number * %s - second as decimal number * %u - microsec as decimal number * @param string date string to convert to date * @param string format expected format of the original date * @return string rfc3339 w/o timezone YYYY-MM-DD YYYY-MM-DDThh:mm:ss YYYY-MM-DDThh:mm:ss.s */ function parseDate( $date, $format ) { // Builds up date pattern from the given $format, keeping delimiters in place. if( !preg_match_all( "/%([YmdHMsu])([^%])*/", $format, $formatTokens, PREG_SET_ORDER ) ) { return false; } foreach( $formatTokens as $formatToken ) { $delimiter = preg_quote( $formatToken[2], "/" ); if($formatToken[1] == 'Y') { $datePattern .= '(.{1,4})'.$delimiter; } elseif($formatToken[1] == 'u') { $datePattern .= '(.{1,5})'.$delimiter; } else { $datePattern .= '(.{1,2})'.$delimiter; } } // Splits up the given $date if( !preg_match( "/".$datePattern."/", $date, $dateTokens) ) { return false; } $dateSegments = array(); for($i = 0; $i < count($formatTokens); $i++) { $dateSegments[$formatTokens[$i][1]] = $dateTokens[$i+1]; } // Reformats the given $date into rfc3339 if( $dateSegments["Y"] && $dateSegments["m"] && $dateSegments["d"] ) { if( ! checkdate ( $dateSegments["m"], $dateSegments["d"], $dateSegments["Y"] )) { return false; } $dateReformated = str_pad($dateSegments["Y"], 4, '0', STR_PAD_LEFT) ."-".str_pad($dateSegments["m"], 2, '0', STR_PAD_LEFT) ."-".str_pad($dateSegments["d"], 2, '0', STR_PAD_LEFT); } else { return false; } if( $dateSegments["H"] && $dateSegments["M"] ) { $dateReformated .= "T".str_pad($dateSegments["H"], 2, '0', STR_PAD_LEFT) .':'.str_pad($dateSegments["M"], 2, '0', STR_PAD_LEFT); if( $dateSegments["s"] ) { $dateReformated .= ":".str_pad($dateSegments["s"], 2, '0', STR_PAD_LEFT); if( $dateSegments["u"] ) { $dateReformated .= '.'.str_pad($dateSegments["u"], 5, '0', STR_PAD_RIGHT); } } } return $dateReformated; } ?>

« previous php.notes (#128556) next »