0

我正在处理其中某处带有日期的字符串。日期在此字符串中的显示方式有多种:

“... 01.11.2009 18:00-21:00 ...”或“... 01.11.2009 18:00-02.11.2009 15:00 ...”或“... 01.11.2009 18:00 ...”

无论日期如何显示,我只需要开始日期“01.11.2009 18:00”。因此,如果有两个匹配项,则只是第一个匹配项。如何从 php.ini 中的完整字符串中隔离/分解它。任何的想法?

我想我需要用正则表达式创建一个模式,然后用 preg_match 匹配它。是这样吗?不幸的是,我不太喜欢正则表达式。任何人都可以帮助从随机字符串中获取我的单个日期块吗?

4

5 回答 5

1
$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];
于 2009-10-27T01:04:14.820 回答
0

尝试:

$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]);
于 2009-10-27T01:01:12.580 回答
0

如果您的日期以下列方式格式化,则每个日期的字符数将始终相同。然后,您可以使用简单的 substr() 来获取开始的 X 字符:

// 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);
于 2009-10-27T01:02:08.337 回答
0

试试这个:

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"
于 2009-10-27T01:05:03.250 回答
0

您可以使用以下函数提取该格式的第一个日期:

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
于 2009-10-27T01:06:52.147 回答