如何解决如何确定PHP的非标准化日期字符串集中是否存在日,月或年值?
我有一组非标准的日期字符串,我试图确定它们中是否存在日,月或年值。集合中的某些日期有日,月和年,而其他日期可能只有年或只有年和月。
示例:date('Y-m-d',strtotime('April 1982'))
返回:1982-04-01
预期结果:1982-04-00
date('Y-m-d',strtotime('1982'))
返回值:1982-08-11(月和日为当前日期)
预期结果:1982-00-00
编辑:
忘记理想的结果,因为我不再打算用00s来表示它们。我只是想确定标题中所暗示的字符串中是否存在日,月或年值。
解决方法
date_parse()函数适用于此问题。但是,我认为它有一个错误。如果一天不存在,则一天也将显示为1。请参见用户贡献的注释date_parse()。
以下函数DateAnalysis尝试使用正则表达式消除这种情况:
function DateAnalysis($dateString){
$components = date_parse($dateString);
if($components['day'] === 1 AND
preg_match('~^1 |^01 |\-01$|\-1$~',$dateString) == 0){
$components['day'] = false;
}
return $components;
}
可以找到更多的变体here。
示例:
var_dump(DateAnalysis('April 1986'));
输出:
array(12) {
["year"]=>
int(1986)
["month"]=>
int(4)
["day"]=>
bool(false)
["hour"]=>
bool(false)
["minute"]=>
bool(false)
["second"]=>
bool(false)
["fraction"]=>
bool(false)
["warning_count"]=>
int(0)
["warnings"]=>
array(0) {
}
["error_count"]=>
int(0)
["errors"]=>
array(0) {
}
["is_localtime"]=>
bool(false)
}
我不知道日期字符串中日期显示方式的所有可能变化。必须根据需要扩展正则表达式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。