使用PHP在长字符串中查找日期
发布时间:2020-12-13 17:09:32 所属栏目:PHP教程 来源:网络整理
导读:我有一组文件,我正试图从中提取日期.它们主要是纯文本和 HTML,但它们使用的日期格式非常大??(尽管它们都是英文日期).如何在一长串文本中查找和解析这样的日期? updated 2011-03-21T00:43:14Sunday,March 20,2011Wednesday,March 16,2011 | 11:25 AMMarch 20
我有一组文件,我正试图从中提取日期.它们主要是纯文本和
HTML,但它们使用的日期格式非常大??(尽管它们都是英文日期).如何在一长串文本中查找和解析这样的日期?
updated 2011-03-21T00:43:14 Sunday,March 20,2011 Wednesday,March 16,2011 | 11:25 AM March 20,2011 @ 12:21 pm May 5,2011 Published March 19,2011 Some text here (March 19,2011) 10/28/2011 21:16 <a href="#>Author Name</a> on Mar 17th 2011 ... Location,ABBR.,Jan. 8,2008 01/07/2008 (6:00 pm) By Author Name and Company 03/19/2011 09:59 Posted by Author Name on March 16,2011 at 03:20 PM EDT 解决方法
看看
strtotime的功能.
// Output: March 20th,2011 12:00:00 AM echo date( 'F jS,Y h:i:s A',strtotime( "Sunday,2011")); 编辑:这是一个更完整的示例,显示如何解析提供的一堆日期. <?php $dates = array( '03/19/2011 09:59','Wednesday,2011 | 11:25 AM','Sunday,2011','March 20,2011 @ 12:21 pm','May 5,2011'); foreach( $dates as $date) { echo $date . ' ---- ' . date( 'F jS,strtotime( str_replace( array( '@','|'),'',$date))) . "<br />n"; } Demo 当然,有些日期不会按原样解析,因为它们不受date formats列表的支持 – 对于那些日期,你需要做一些额外的过滤/解析来提取日期或将它们形成一个适合strtotime的字符串. 编辑:由于对进一步处理输入字符串感兴趣,下面是一个如何解析文本而不使用正则表达式来获取日期的示例.注意一些日期是如何无法提取的,为此你需要更多的字符串处理,或者使用正则表达式. 作为旁注,如果提供的字符串只是包含日期的许多行变体之一,我会调查使用正则表达式.但是,如果提供的字符串是唯一可以找到日期的格式,则字符串处理应该足够了. $str = 'updated 2011-03-21T00:43:14 Sunday,2011) 10/28/2011 21:16 <a href="#">Author Name</a> on Mar 17th 2011 ... Location,2011 at 03:20 PM EDT'; foreach( explode( "n",$str) as $line) { $line = str_replace( array( '@','|','(',')'),trim( $line)); $line = strip_tags( $line); if( ($time = strtotime( $line)) === false) { echo "Could not parse line - '" . $line . "'n"; // Need additional processing / regex here continue; } echo "Converted '" . $line . "' to '" . date( 'F jS,$time) . "'n"; } Demo. 最终编辑: 最后,举例说明如何进行一些文本处理以获取更多要解析的日期. foreach( explode( "n",')','Published','...'),trim( $line)); $line = strip_tags( trim( $line)); if( ($time = strtotime( $line)) === false) { if( !(($on_position = stripos( $line,'on')) === false)) { $line = substr( $line,$on_position + 3); if( ($time = strtotime( trim( $line))) === false) { echo "Could not parse line that contains 'on' - '" . $line . "'n"; continue; } } echo "Could not parse line - '" . $line . "'n"; continue; } echo "Converted '" . $line . "' to '" . date( 'F jS,$time) . "'n"; } Demo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |