Am I missing something? Can't this be done quickly/easily with preg_match()? if (preg_match('/\[(.*):(.*)\s/U', '[21/Jul/2009:00:00:47 -0300]', $matches)) { print "date: {$matches[1]}, time: {$matches[2]}"; } Jerry Wilborn jerrywilborn@xxxxxxxxx On Tue, Aug 4, 2009 at 5:36 AM, Wolf <LoneWolf@xxxxxxxxx> wrote: > Paul Halliday wrote: > > Whats the cleanest (I have a really ugly) way to break this: > > > > [21/Jul/2009:00:00:47 -0300] > > > > into: > > > > date=21/jul/2009 > > time=00:00:47 > > > > Caveats: > > > > 1) if the day is < 10 the beginning of the string will look like > "[<space>1/... > > 2) the "-0300" will differ depending on DST or TZ. I don't need it > > though, it just happens to be there. > > > > This is what I have (it works unless day < 10): > > > > $theParts = split("[\"]", $theCLF); > > > > // IP and date/time > > $tmpParts = explode(" ", $theParts[0]); > > $theIP = $tmpParts[0]; > > $x = explode(":", $tmpParts[3]); > > $theDate = str_replace("[","", $x[0]); > > $theTime = "$x[1]:$x[2]:$x[3]"; > > > > the full text for this part looks like: > > > > 10.0.0.1 - - [21/Jul/2009:00:00:47 -0300] ... more stuff here > > > > Anyway, any help would be appreciated. > > > > thanks. > > > > unset ($STRING,$pos,$pos2,$pos3,$L,$D,$T,$pos4,$NString); > $STRING="10.0.0.1 - - [21/Jul/2009:00:00:47 -0300] ... more stuff here" > $pos=strpos($STRING,"["); > $pos2=strpos($STRING,"]"); > $L=$pos2-$pos; > $NString=substr($STRING,$pos,$L); > $pos3=strpos($NString,":"); > $D=substr($NString,0,$pos3); > $pos4=$pos3++; > $T=substr($NString,$pos4,8); > echo "date=$D"; > echo "time=$T"; > > untested, but that should be pretty much all you need. > > HTH, > Wolf > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >