Convertir cumpleaños en formato DDMMMYY al valor de la fecha en PHP

Tengo un montón de cumpleaños que se almacenan en formato DDMMMYY. Necesito convertir esos valores a fecha, así que puedo almacenarlos en la base de datos.

¿Hay alguna manera fácil de decir la función de tiempo de recorrido que la fecha debe estar en el pasado?

 

  

Esto supone que 22SEP06 debe interpretarse como 2006 en lugar de 1906, básicamente le da a la salida un rango de 1917 -> 2016.

Este método crea una fecha del siglo pasado solo si la fecha estándar evaluada es posterior a la de hoy:

 $date = date_create( $datestring ); if( $date->diff( date_create() )->invert ) { $date->modify( '-100 years' ); } echo $date->format( 'Ymd' ); 

por

 $datestring = '22SEP41'; 

la salida es:

 1941-09-22 

por

 $datestring = '22SEP01'; 

la salida es:

 2001-09-22 

eval.in demo

Básicamente, creamos un DateTime basado en una cadena dada, luego calculamos la diferencia con el día actual; si la diferencia es negativa ( ->invert ), restamos 1 siglo de la fecha.

Puede personalizar la condición usando ->format('%R%Y') lugar de ->invert . En este ejemplo:

 if( $date->diff( date_create() )->format('%R%Y') < 10 ) 

Fechas del 00 al 05 evaluadas como 2000-2005 .

Podrías probar algo como:

 $ds = '22SEP41'; $day = $ds[0].$ds[1]; // Getting the month. $mon = array( 'JAN' => 1, 'FEB' => 2, 'MAR' => 3, 'APR' => 4, 'MAY' => 5, 'JUN' => 6, 'JUL' => 7, 'AUG' => 8, 'SEP' => 9, 'OCT' => 10, 'NOV' => 11, 'DEC' => 12 ); $mont = $ds[2].$ds[3].$ds[4]; $month = $mon[$mont]; // Gets the month real. $year = '19'.$ds[5].$ds[6]; $final = $day.'-'.$month.'-'.$year; 

Lo probé en mi máquina local y funcionó. Espero que funcione y es lo que estás buscando 🙂