我有一个数据库表,存储哪些天(周一到周日)是工作日,哪些不是。该表包括2个属性,“日”(周一至周日的1,2,3,4,5,6,7)和“工作”。我使用数字'0'和'1'表示他们是否工作日,'1'是非工作日。我在星期五,星期六和星期日的数据库中设置为非工作(5,6,7)。
$addrange = $annstart;
$minusday = 0; //numbers of nonworking days
$resultnonworking = mysql_query("SELECT dayid FROM workingdays WHERE working='1'");
while ($nonworking = mysql_fetch_array($resultnonworking))
{
while ($datediffdays > 1)
{
$addrange = date('Y-m-d', strtotime($addrange . ' + 1 day'));
$daycheck = date('N', strtotime($addrange));
if ($daycheck == $nonworking['dayid'])
{
$minusday = ++$minusday;
}
$datediffdays = --$datediffdays;
}
$startdaycheck = date('N', strtotime($annstart));
if ($nonworking['dayid'] == $startdaycheck)
$minusday = ++$minusday;
}
然而,我的while循环只运行一次并检查哪个日期是星期五,而不是星期六和星期日。
有人能发现我的代码有什么问题吗? 提前谢谢。
答案 0 :(得分:1)
解释你的问题,你的循环如下。
while ($nonworking = mysql_fetch_array($resultnonworking))
{
while ($datediffdays > 1)
{
看到它首先获取一条记录,然后直到$datediffdays
小于1才运行内循环。
现在当你回到第一个循环时,$datediffdays
的值已经小于1,所以它不会进入第二个循环。
为了完成这项工作,你必须在第一个循环中初始化$datediffdays
,如
while ($nonworking = mysql_fetch_array($resultnonworking))
{
$datediffdays = 5;
while ($datediffdays > 1)
{
作为您现在所做的更改,在while循环中获取记录,然后只在循环中减少$datediffdays
变量的值
因此它正在工作,因为$datediffdays
的值在第一次进入循环时未设置为小于1.
我不能建议哪种方法最好,因为你的所有代码都不在这里
答案 1 :(得分:0)
我已经将内部while循环与外部循环切换,并且稍微改变一下,它现在正在工作。但我不知道为什么它会以这种方式工作而不是另一种方式。
$addrange = date('Y-m-d', strtotime($annstart . ' - 1 day'));
$minusday = 0; //numbers of nonworking days
while ($datediffdays > 0)
{
$addrange = date('Y-m-d', strtotime($addrange . ' + 1 day'));
$checkrange = date('N', strtotime($addrange));
$resultnonworking = mysql_query("SELECT * FROM workingdays WHERE working='1'");
while ($nonworkingcheck = mysql_fetch_array($resultnonworking))
{
if($nonworkingcheck['dayid'] == $checkrange)
{
$minusday = $minusday + 1;
}
}
$range = $range." ".$addrange;
$datediffdays = $datediffdays-1;
}
$range = substr($range,11);