2017-05-29 84 views
1

使用PHP给定我有一个foreach循环经过glob来输出一些图像,我想提取图像上传的日期和时间。从文件名中返回的PHP提取日期在foreach中返回

我有如下,上载时,他们的名字命名:

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中。

回答

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

编辑忘了替代品。

+0

谢谢@Álvaro! – Andreas

+0

很好的回答!简单而客观! –

+0

你打算去掉.jpg吗?我想问的原因是,它似乎不是,但我注意到。*在表达式开始时。 – Bolte

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); 
} 

您的时间,如果格式总是相同的 - don' t检查内容并将其分割为2个字符2:

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

希望这会有所帮助。

+0

谢谢你的尝试:) – Bolte