我在这方面需要帮助,而不是代码(我认为这是我的工作;)
我需要分发供应商在工作日中的一个月内必须进行的访问。 本月我有100人参观,有不同的周期性参数。
每天有25人参观一次。 25人每月访问两次 每周25人参观一次 每天有25人参观我需要在每个月的第一天分发所有这些访问,直到本月的所有工作日,我真的不知道我该怎么办。
我认为我需要的一些数据包含下一个代码:
$days_this_month = date("d",mktime(0,0,0,$month+1,0,$year));
function weeks_this_month($year, $month, $start = 0) {
$unix = strtotime ( "$year-$month-01" );
$numDays = date ( 't', $unix );
if ($start === 0) {
$dayOne = date ( 'w', $unix ); // Based on 0-6
} else {
$dayOne = date ( 'N', $unix ); //based on 1-7
$dayOne --; //convert for 0 based weeks
}
//if day one is not the start of the week then advance to start
$numWeeks = floor ( ($numDays - (6 - $dayOne)) / 7 );
return $numWeeks;
}
$weeks_this_month = weeks_this_month($year, $month);
我还得到每周的日子:
$weekArray = array();
// set current date1
$date = date("m/d/Y"); //'05/09/2011';
$date = "05/11/2011"; //'05/09/2011';
// parse about any English textual datetime description into a Unix timestamp
$ts = strtotime( $date );
// calculate the number of days since Monday
$dow = date('w', $ts);
$offset = $dow - 1;
if ($offset < 0) $offset = 6;
// calculate timestamp for the Monday
$ts = $ts - $offset*86400;
// loop from Monday till Sunday
for ($i=0; $i<7; $i++, $ts+=86400){
$temp_date = date("Y-m-d", $ts); // here I set it to the same format as my database
array_push( $weekArray, $temp_date );
}
print_r ($weekArray);
目前的结果:
[0] => 2011-05-09
[1] => 2011-05-10
[2] => 2011-05-11
[3] => 2011-05-12
[4] => 2011-05-13
[5] => 2011-05-14
[6] => 2011-05-15
我的最后一次检查是一个函数,可以知道结果日是工作日,而不是周六或周日。
问题在于我真的迷失了。
我不知道如何混合所有这些信息来分发供应商访问。
有人可以给我一个想法吗?
真的是thnx。
答案 0 :(得分:1)
这只是部分答案,但如果我改写一下这个问题:
所以你需要知道一些事情作为问题的输入:
假设您知道您正在计算的月份,您上面的逻辑提供了一种获取特定月份日期的方法。工作日也是计算的。您需要知道(或获得)可以适合一天的访问次数;如果没有此约束,您将无法“安排”访问。这是我将遵循的逻辑(松散地):
获取可用天数
到目前为止一直很好 - 我们有一个“可用日期”的离散列表;现在我们来看一下可能的劳动力分配算法。
获取所需的访问次数
希望#5和#6显而易见,但我会稍微解释#7 ......如果你想分配访问次数,并假设所有访问都具有相同的优先级,那么一种方法就是从最高频率,然后向后工作到最低。如果您每天都有访问,那么先将它们分散出去,然后再分为每周一次,然后是每两周一次,然后是每月一次。每个周期都有一组不同的约束,因此隔离逻辑可能是有意义的。粗略的想法是:
每日强>
<强>每周强>
Bi每月
<强>每月强>
...
根据您的目的,仍有一些问题需要解决......
只是一些想法。希望这会有所帮助。