我正在寻找一种用于验证日期的通用方法。
我想要的是某种实现验证规则的方法,例如:
First monday of month
monday or friday
Fourth day of month
有什么可以处理这样的要求吗?或者有人对我如何实现这一点有任何指示吗?
编辑:我很欣赏答案,但这是我现在最终使用的内容:
感谢所有的答案。我实际上最终使用的(至少在我找到完美的解决方案之前)大致是这个功能:
function isDateValid($rule,$date){
$DATE = (int) $date;
/* Make it safe for eval */
preg_match_all('/:\w:|&&|\|\||<|=|>|!|\(|\)|\d+/i',$rule,$filteredRule);
$rule = implode('',$filteredRule[0]);
//replace rule notations
$f = function($str){
return "date('$str[1]',\$DATE)";
};
//Or if php < 5.3: $f = create_function('$str', 'return "date(\'$str[1]\',\$DATE)";');
$rule = preg_replace_callback('/:(\w):/i', $f, $rule);
//Evaluate expression
return @eval("return $rule;");
}
//Example of usage testing first of month:
var_dump( isDateValid(':d:==1',time()) );
这让我可以处理我的所有需求,以及 PHP 代码。使用它的人非常有限(<5 人),而且大多数人都有一定程度的 php 经验。现在我可以制定规则,例如:
first monday of month
::w:==1 && :d: <= 7
monday or friday
::w:==1 || :w:==5
Fourth day of month
::d: == 4
我希望有一个更好更灵活的解决方案或有关安全性的反馈(这可以注入恶意 php 代码吗?)