从foreach

时间:2017-05-29 15:16:34

标签: php string filenames

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

上传时我将它们命名如下:

1234567_29052017-122959.jpg

_之前的第一个数字序列是一个帐号,这是要删除的。第二个数字序列是日期,所以2017年5月29日。第三个数字序列是一天中的时间,所以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。

2 个答案:

答案 0 :(得分:2)

$subst = '$1/$2/ $4:$5:$6';
$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

编辑忘记了替补。

答案 1 :(得分:0)

是的,像这样爆炸以获取日期:

// 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个字符:

$ outputString = chunk_split($ string,2,“:”);

希望这有帮助。