不一致的 createFromFormat 返回(PHP)

这有效(注意个位数“.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");



跃然一笑
浏览 182回答 1
1回答

湖上湖

*从手册中可以清楚地看出为什么在使用时失败:随机字节直到下一个分隔符或数字你必须在连续两个数字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');
打开App,查看更多内容
随时随地看视频慕课网APP