Pregunta

Estoy procesando cadenas con una fecha en algún lugar. Hay diferentes maneras en que la fecha puede aparecer en esta cadena:

" ... 01.11.2009 18: 00-21: 00 ... " o "... 01.11.2009 18: 00-02.11.2009 15:00 ..." o "... 01.11.2009 18:00 ..."

Independientemente de cómo aparezca la fecha, solo necesito la fecha de inicio "01.11.2009 18: 00". Entonces, si hay dos coincidencias, es solo la primera. ¿Cómo puedo aislar / explotar esto de la cadena completa en php? alguna idea?

Creo que necesito crear un patrón con expresiones regulares y luego combinarlo con preg_match. ¿Es esta la forma? Lamentablemente, no me gusta mucho la expresión regular. ¿Podría alguien ayudarme a obtener mi bloque de fecha única de una cadena aleatoria?

¿Fue útil?

Solución

$matches = array();
$desired_date = '';
preg_match('/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/', $string_containing_dates, $matches);
if (isset($matches[0])) $desired_date = $matches[0];

Otros consejos

Prueba:

$s = "… 01.11.2009 18:00-21:00 …… 01.11.2009 18:00-02.11.2009 15:00 …… 01.11.2009 18:00 …";
preg_match_all('!(\d{2}\.\d{2}\.\d{4}) \d{2}:\d{2}(-\d{2}:\d{2}|-\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})?!', $s, $matches);
print_r($matches[1]);

si su fecha está formateada de la siguiente manera, siempre tendrá el mismo número de caracteres para cada fecha. Luego, podría usar un substr () simple para tomar los caracteres X iniciales:

// example date strings
$date = date('m.d.Y h:i:S');
$date2 = date('m.d.Y h:i:S', strtotime('+50 days'));
$date_str = $date . '-' . $date2;

// get the first 10 characters for the date
$match = substr($date_str, 0, 10);

Pruebe este:

preg_match_all(
    '/([0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2})' // linebreak added
    . '(?:-(?:[0-9]{2}\.[0-9]{2}\.[0-9]{4} )?(?:[0-9]{2}:[0-9]{2})?)?/',
    '" 01.11.2009 18:00-21:00 " or " 01.12.2009 18:00-02.12.2009 15:00 " '
    . 'or " 01.01.2009 18:00 "',
    $matches
);

print_r($matches[1]);
// "01.11.2009", "01.12.2009", "01.01.2009"

Puede extraer la primera fecha en ese formato utilizando la función a continuación:

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top