我遇到了一个问题,如何检查特定日期是否在php中允许的工作日数组内。例如,
function dateIsAllowedWeekday($_date,$_allowed)
{
if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
$allowed_weekdays=json_decode($_allowed);
$weekdays=array();
foreach($allowed_weekdays as $wd){
$weekday=date("l",date("w",strtotime($wd)));
array_push($weekdays,$weekday);
}
if(in_array(date("l",strtotime($_date)),$weekdays)){return TRUE;}
else {return FALSE;}
}
else {return FALSE;}
}
/////////////////////////////
$date="21.05.2010"; //actually is Friday (5)
$wd="[0,1,2]"; //Sunday,Monday,Tuesday
if(dateIsAllowedWeekday($date,$wd)){echo "$date is within $wd weekday values!";}
else{echo "$date isn't within $wd weekday values!"}
我输入日期格式为“dmY”,数据库返回的数据包含工作日数字(格式为'星期几的数字表示'),如[0,1,2] - (星期日,星期一,星期二) )。
从数据库返回的字符串可以是“null”,所以我也检查它。然后,isDate
函数检查日期是否为日期,并且没有问题。
我想检查我的日期,例如21.05.2010是否是此数组中允许的工作日。我的函数总是返回TRUE,不知何故工作日总是'星期四',我不知道为什么......
有没有其他方法可以检查这个或上面代码中的错误是什么? THX
答案 0 :(得分:2)
我不确定为什么你觉得需要将一周中的数字日转换为字符串(例如“星期日”),因为你最后只返回一个布尔值;无论如何我删除了那部分,下面的代码应该按预期运行:
function dateIsAllowedWeekday($_date,$_allowed)
{
if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null)))
{
$allowed_weekdays = json_decode($_allowed);
if (in_array(date("w", strtotime($_date)), $allowed_weekdays))
{
return TRUE;
}
}
return FALSE;
}
使用上面的allowed_weekdays(21.05.2010
)测试11.05.2010
(返回false)和[0,1,2]
(返回true)。
答案 1 :(得分:1)
如果你已经运行PHP5.3,你也可以这样做:
function date_validWeekday($format, $date, array $weekdays) {
return in_array(
DateTime::createFromFormat($format, $date)->format('w'),
$weekdays);
}
var_dump(date_validWeekday('d.m.Y', '21.05.2010', array(0,1,2))); // FALSE
var_dump(date_validWeekday('d.m.Y', '11.05.2010', array(0,1,2))); // TRUE
答案 2 :(得分:1)
它周四继续返回的原因是因为你在单个数字整数上使用strtotime()
:
$weekday=date("l",date("w",strtotime($wd)));
其中一件事正在发生,我想我不确定:
该函数将整数解释为纪元时间戳,或
该函数返回false,date
函数为0
。
在任何一种情况下,您都在原始纪元开始时间的10秒内:
Thu, 01 Jan 1970 00:00:00 GMT
这是星期四。
答案 3 :(得分:0)
function dateIsAllowedWeekday($_date,$_allowed){
if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
return in_array(date("w",strtotime($_date)),json_decode($_allowed));
}
return false;
}