这有效(注意个位数“.3”)$date = DateTime::createFromFormat("*-*-*.*.*-Y-m-d-H?i.*", "backup-bla-3.3.3-2019-08-23-21h16.7z");这失败了(注意两位数“.33”:$date = DateTime::createFromFormat("*-*-*.*.*-Y-m-d-H?i.*", "backup-bla-3.3.33-2019-08-23-21h16.7z");这对我来说毫无意义。为什么*在这种情况下不成功?以下内容也适用于这个特定示例,但我无法使用它,因为版本号可能有两位数。$date = DateTime::createFromFormat("*-*-*.*.??-Y-m-d-H?i.*", "backup-bla-3.3.33-2019-08-23-21h16.7z");
1 回答

湖上湖
TA贡献2003条经验 获得超2个赞
*从手册中可以清楚地看出为什么在使用时失败:
随机字节直到下一个分隔符或数字
你必须在连续两个数字3,并3因此,当它到达第二3你提供的格式不正确而导致错误。
反之亦然**,??因为当你有一个数字时,第二个*和?匹配的第二个字符就没有了。
我看不到使用可用格式字符的任何方法。您的解决方案似乎正在修改该值以在年份之前删除任何内容,然后使用Datetime:createFromFormat().
$parts = preg_split('/(?=\d{4})/', 'backup-bla-3.3.3-2019-08-23-21h16.7z', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$date = DateTime::createFromFormat("Y-m-d-H?i.*", $parts[1]);
echo $date->format('c');
没有找到匹配的内容?试试慕课网站内搜索吧
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消