PHP 从 foreach 返回的文件名中提取日期

PHP extract date from filename returned in foreach

使用 PHP 鉴于我有一个 foreach 循环通过 glob 输出一些图像,我想提取图像上传的日期和时间。

我在上传的时候给它们起的名字是这样的:

1234567_29052017-122959.jpg

_前面的第一串数字是账号,这个要去掉。第二个数字序列是日期,即 29/05/2017。第三个数字序列是一天中的时间,所以 12:29:59。每个文件名在下面的 foreach 中输出为 $image:

$dirname = 'photos/' . $account . '/';
$images = glob($dirname.'*.jpg');

If ($images == null ) {
    echo "There was no photos returned for the account number that you entered.";
} else {

    foreach($images as $image) {
        echo '
            <div class="viewerContent" style="width:220px; min-height: 160px;">Insert Date Here <br />
            <a href="'.$image.'"><img src="'.$image.'" width="220" height="160" title="'.$image.'" /></a><br />
            </div>';
    }   

}               

我想要的是从上面给出的示例中提取以下内容。

1234567_29052017-122959.jpg

29/05 12:29:59s 

谁能帮我实现这个目标?

我将把生成的时间戳添加到重复回显的 Insert Date Here 部分的 foreach。

$subst = '// ::';
$pattern = '/.*_(\d{2})(\d{2})(\d{4})-(\d{2})(\d{2})(\d{2})/g';
$new = preg_replace($pattern, $subst, $oldstr);

https://regex101.com/r/Pxn2jr/1

编辑忘了替换。

是的,像这样分解得到日期:

// Assuming a filename like this "1234567_29052017-122959.jpg"
$filedate = explode('_',$filename)[1];
$filehour = substr(explode('-',$filename)[1], 0, -3);

要将您的字符串转换为日期:

function reformatDate($date, $from_format = 'dmY', $to_format = 'd/m') {
    $date_aux = date_create_from_format($from_format, $date);
    return date_format($date_aux,$to_format);
}

对于您的时间,如果格式始终相同 - 不要检查内容并将其分成 2 个字符乘以 2:

$outputString = chunk_split($string, 2, ":");

希望对您有所帮助。