Ik lees datums uit een gedcom bestand, maar die zijn in dd-MMM-yyyy waar bij MMM de letters van de maand zijn.
Nu wil ik graag dd-mm-jjjj, met maand in cijfers.

In mijn oude versie had ik per maand een regel om dit om te zetten, zie hier onder.
ereg_replace bestaat niet meer, maar is nu een handig alternatief?


$Ggeboortedatum=  ereg_replace( "JAN", "-01-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "FEB", "-02-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "MAR", "-03-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "APR", "-04-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "MAY", "-05-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "JUN", "-06-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "JUL", "-07-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "AUG", "-08-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "SEP", "-09-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "OCT", "-10-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "NOV", "-11-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( "DEC", "-12-", $Ggeboortedatum );
$Ggeboortedatum=  ereg_replace( " ", "", $Ggeboortedatum);
Daar heb je toch geen regex voor nodig?
$Ggeboortedatum = strtr($Ggeboortedatum,[
  'JAN' => '01',
  'FEB' => '02',
  //enz
]);
Normaal zou je dan in plaats van [php]ereg_replace[/php] of [php]eregi_replace[/php] de functie [php]preg_replace[/php] gebruiken. Maar dat is gewoon een zware functie voor iets kleins als dit. Je kan beter inderdaad, net als Rob zegt, gewoon [php]strtr[/php] gebruiken.

De genoemde functies die je dus niet nodig hebt, zijn vooral bedoeld voor reguliere expressies. Daar is in jouw voorbeeld geen enkele sprake van.
De uitvoer wordt nog niet mooi, komt denk ik door het formaat in het gedcom bestand.
Dit is bijvoorbeeld "1 OCT 1874" of "19 MAY 1904" of "ABT 8 MAR 1796"
Ik zou dit graag zien als "01-10-1874" of "19-05-1904" of "~08-03-1796"
Maar de cijfers en letter staan niet altijd op dezelfde plaats. Is dit eenvoudig te wijzigen?
<?php
$date = "1 OCT 1874"; // datum zoals jij die hebt
$timestamp = strtotime($date); // maak er een timestamp van
$formatted = strftime("%d-%m-%Y",$timestamp); // timestamp formatteren tot leesbare datum
echo $formatted; // en toon de datum
?>
pro tip: maak hier meteen yyyy-mm-dd van, zodat je hier makkelijk mee kunt sorteren en filteren. Je kunt een datum altijd nog mooi formatteren voor weergave.

De interne representatie zou je moeten helpen om je data te beheren. dd-mm-yyyy of wat voor (ander) formaat dan ook is daarvoor ongeschikt.
Dat is inderdaad mooie oplossing als de data er normaal in staat.
Het gedcom bestand wat ik inlaad vanuit een stamboom programma bevat echter ook ABT voor de datum, die herkent timestamp niet?
Waar staat ABT dan voor?
ABT is engelse/amerikaanse afkorting van 'About' en betekent 'circa' of 'ongeveer'
Dus voor ABT voor een datum, betekent het ongeveer die datum, maar de exacte datum is niet bekend

Ik probeerde met str_replace ABT te vervangen door niets en dan de oplossing van Ariën, maar dat werkt niet

			
str_replace('ABT','',$Ggeboortedatum);
If($Ggeboortedatum !=''){$timestamp = strtotime($Ggeboortedatum); 
$Ggeboortedatum = strftime("%d-%m-%Y",$timestamp);} 

Reageren