我已经在MySQL 的日期和时间函数页面上寻找了很长一段时间,但是我找不到一个函数可以指示时间格式是否可以用于例如该STR_TO_DATE
函数。用户提供了一种格式,我希望接受尽可能广泛的格式。该格式可以稍后在脚本中与 MySQL 的STR_TO_DATE
函数一起使用,该函数反过来在失败时返回 NULL(这是我想避免的,通过在用户提供无效时间格式时预先警告用户)。我打算在临时表的帮助下以某种方式测试格式。
我无法使用该STR_TO_DATE
函数测试格式的有效性,因为将传递给它的字符串值最终将由用户生成(在未来未定义的时间点),所以我不知道哪些字符串是将被传递给它。我曾希望该DATE_FORMAT
函数可以解决我的问题,但它只是忽略了任何无效的格式说明符(例如,%Q
没有任何意义,并将转换为Q
)。在任何情况下都不会返回 NULL,也不会产生警告。
有任何想法吗?
编辑:我能想出的唯一大致可靠的解决方案是列出所有 MySQL 支持的格式说明符,并将这些说明符与用户提供的格式中存在的所有格式说明符进行比较。
preg_match_all("/(?:(?<!%)|(?<=%%))(?:%%)*%([^%])/", $format, $matches);
正则表达式列出了前面出现奇数个百分号的所有字符。(这是必要的,因为百分号会自行逃逸。)现在$matches[1]
包含这些字符的列表。