繁体   English   中英

从文件名PHP中提取日期

[英]Extract Date from Filename PHP

我有来自不同来源的数十万个文件。 每个文件的名称中都有日期,但是文件名的结构不同,例如:

2015-10-05-importsrc1.txt
20151004importsrc2.txt
importsrc3-154826-4521-2015-10-06.csv
importsrc4-154826-4521-20151006.txt

我需要处理本月和下个月的文件,而忽略任何较旧的文件。

我已经看到了一些示例,这些示例如何使用循环检查所需日期来检查特定文件,但是我试图避免过多的循环,并可能使用正则表达式对日期进行模式匹配,然后进行比较。

当前,我使用以下命令(其中$f是文件名和扩展名):

//CHANGED THIS TO SKIP OLD ONES
if(strpos(str_replace("-", "", $f), "201510") == false)
{
    continue;
}

但这仅适用于上个月,并且目前已进行了硬编码,理想情况下,我需要类似以下内容的代码:

//CHANGED THIS TO SKIP OLD ONES
$extractedDate = preg_match('DATEPATTERN',(str_replace("-", "", $f), "201510"),$extractedDate );
if(strtotime($extractedDate[0]) < date('Y-m-d',(strtotime ('-1 Month', strtotime (date('Y-m-d)))))
{
    continue;
}

我知道我可以简单地更改我的第一次尝试,添加另一个条件并使它动态,但是如果我能够提取日期,那么它将在很多方面有所帮助。

我一直没有在网上找到有关如何执行此操作的任何信息。 似乎没有确切的科学依据。 使用上面的注释,我有以下正则表达式可以匹配指定的文件:

$re = '/(\d{8})|([0-9]{4}-[0-9]{2}-[0-9]{2})|([0-9]{2}-[0-9]{2}-[0-9]{4})/';
$str = "20151001-importsrc1.txt";
$str = "2015-10-01-importsrc1.txt";
$str = "01-10-2015-importsrc1.txt";
$str = "importsrc1-2015-10-01.txt";
$str = "importsrc1-01102015.txt";
$str = "importsrc1-01-10-2015.txt";
preg_match($re, $str, $matches);
$date = str_replace("-", "", $matches[0]);
print_r($date);

有三种模式来匹配20151001011020152015-10-0101-10-2015 从这里,我将可以对日期进行比较。

这当然不是绝对的答案,但将来可能会帮助某个人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM