This PHP script came up in a discussion I had today with Jon Whitlock, who’s from the other side of the pond (U.K.) It’s a nifty little regular expression that converts an American date (12/31/2006) into a European date (31/12/2006). It struck me as a neat little snippet that others could probably use.
Updated Code
As Scott mentioned in the comments, I have changed the snippet to put quotation marks around the second regular expression.
$date=“12/31/2006″;
print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)â€,“\2/\1/\3“,$date);
As he described it, the first section of the ereg_replace statement takes the date and places it into three variables, 1,2,and 3. It then places those variables into a new string in the 2/1/3 pattern. That makes this a round trip function. Your European dates can get converted back to Yankee days as well.

don’t seem to work as php script
> print ereg_replace(“([0-9] )/([0-9] )/([0-9] )â€,\\2/\\1/\\3,$date);
should be: print ereg_replace(“([0-9] )/([0-9] )/([0-9] )”,”\\2/\\1/\\3″,$date);
Awesome! Although I used $3-$1-$2 (instead of the \\ notation)
Saved the above into a .php file and ran it, does nothing except output the date as it was.
useless.
Agreed, this example simply doesn’t work unless there is something about the PHP environment that needs setting which has not been given here?
Much simpler and more consistent results by using echo date( ‘m-d-Y’, strtotime( $date) )
I originally posted this script as a reminder. I wanted to go back and look at it if needed in the future. At the time, I didn’t know much about php or regex. So I’m sorry if it doesn’t work.
I would agree with Justin. If I were to do it today, i’d probably convert to unix time stamp and then use the built in date formatting options in PHP. But that is because I dislike regex and the date formatting in PHP is much easier to understand.
However, the point of this snippet is to change from US dates to EU and vice versa. Using the built in php date formatting is only one way. You’d have to localize it for each region.
$date=’12/31/2006′;
$date = explode (‘/’,$date);
echo $date[1].’/’.$date[0]./.$date[2];
Here’s a date function that works for me.
European format to American
function e2aDate($strDate) {
trim($strDate);
list($d, $m, $y) = explode(‘/’, $strDate);
$mk = mktime(0,0,0,$m, $d, $y);
$americanDate =strftime(‘%Y-%m-%d’,$mk);
return $americanDate;
}
$aDate=e2aDate(“10/02/2011”); //call the function pass date
$aDate would be set to 2011-02-10
OR
American to European
function a2eDate($strDate) {
trim($strDate);
list($y, $m, $d) = explode(‘-‘, $strDate);
$mk = mktime(0,0,0,$m, $d, $y);
$europeanDate =strftime(‘%d/%m/%Y’,$mk);
return $europeanDate;
}
$aDate=a2eDate(“02/10/2011”); //call the function pass date
$aDate would be set to 10/02/2011
change the strftime(‘%d/%m/%Y’,$mk); %d %m %y positions to give correct format.
It isn’t european date, it is english date, euro dates are
Y/M/D
for their sins.
Great script! Worked perfect without modification, which is rare. For everyone else who thought this script didn’t work, you’re simply wrong. Perhaps you didn’t use it correctly. Worked awesome for my purpose as I couldn’t use they typical date() and strtotime() functions because of the input I was getting. Nice job.