为了账号安全,请及时绑定邮箱和手机立即绑定

不一致的 createFromFormat 返回(PHP)

不一致的 createFromFormat 返回(PHP)

PHP
跃然一笑 2021-12-03 19:42:47
这有效(注意个位数“.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');


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 181 浏览

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号