我们已经以特定格式将文件上传到我们的服务器,该格式指示版本和生成日期,例如: 5_5_61__20180828.dav
第一组数字代表版本5_5_61
,最后一组数字代表构建日期20180828
,然后.dav
只是文件扩展名。
我们如何提取和格式化此文件名,使其看起来像这样:
Version: 5.5.61 Build Date: 08/28/2018
我一直在尝试此代码段的不同变体,但似乎找不到正确的方法:
$file = '5_5_61__20180828.dav';
echo substr($file, strpos($file , "_") + 1);
我应该注意,如果有一种更容易的方法,使用文件的不同命名约定来获得最终结果,我愿意更改文件名。
答案 0 :(得分:3)
如果您知道版本和日期之间用__
(两个下划线)分开,那就很简单了。
首先在__
上分割字符串(两个下划线),这将为您提供版本以及带扩展名的日期。再次展开最后一部分,以将日期与扩展名分开。然后在您的版本中将_
(下划线一个)替换为.
,然后全部打印。
由于20180828
不是strtotime()
函数的标准日期格式,因此请使用DateTime::createFromFormat()
创建日期对象。
$filename = '5_5_61__20180828.dav';
$parts = explode("__", $filename);
$parts2 = explode(".", $parts[1]);
$version = str_replce("_", ".", $parts[0]);
$date = $parts2[0];
$extension = $parts2[1];
$date = DateTime::createFromFormat("Ymd", $date)->format("m/d/Y");
echo "Version: $version. Build Date: $date";
答案 1 :(得分:1)
$file = '5_5_61__20180828.dav';
$version = str_replace("_", ".", substr($file, 0, -14));
$d = DateTime::createFromFormat("Ymd", substr($file, -12, 8))->format("m/d/Y");
echo 'Version: ' . $version . ' Build Date: '. $d;