【发布时间】:2018-08-08 11:36:15
【问题描述】:
所以这是我将日期从选定日期设置为自动设置日期的代码,不包括周末(周六和周日)和假期(我将其放入数据库中):
function number_of_working_dates($from, $days) {
/* get holiday from database */
include('includes/config.php');
$sss = "SELECT tanggal_awal FROM libur_nasional GROUP BY tanggal_awal ASC";
$qqq = mysqli_query($konek,$sss);
$arr = array();
while ( $tam = mysqli_fetch_array($qqq)) {
$date = $tam['tanggal_awal'];
$reformat_date = date("Y-m-d", strtotime($date));
$arr[] = $reformat_date;
}
$array_date_2 = '"'.implode('", "' , $arr) . '"';
implode() 的输出是日期列表:
"2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"
然后继续:
$holidayDays = [$array_date_2];
//$holidayDays = ["2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"]
$from = new DateTime($from);
$dates = [];
$dates[] = $from->format('Y-m-d');
**echo count($holidayDays);**
while ($days) {
$from->modify('+1 day');
if (!in_array($from->format('N'), $workingDays)) continue;
if (in_array($from->format('Y-m-d'), $holidayDays)) continue;
if (in_array($from->format('*-m-d'), $holidayDays)) continue;
$dates[] = $from->format('Y-m-d');
$days--;
}
return $dates;
}
当我使用“count”计算“holidayDays”数组时,它只显示 1 个项目,但是当我像在注释行中那样对日期列表进行硬编码时,它可以工作并显示 4 个项目。
有人可以帮我吗?
【问题讨论】:
-
我不确定,但是你可以计算一个字符串而不是一个数组吗?
-
你的问题没有意义。
$holidayDays = [$array_date_2];显然是一个包含一个东西的数组,为什么会是其他东西?$holidayDays = "2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"抛出异常:解析错误:语法错误,意外',' -
你的意思是:
$holidayDays[] = $array_date_2;? -
你需要定义 $array_date_2 里面的内容。试试
var_dump,看看你得到了什么回报。 -
$holidayDays = [$array_date_2];将是一个包含单个项目的数组。该项目是列出所有日期的字符串。所以是的,计数是 1,因为数组包含 1 个字符串。 “内爆”函数产生一个字符串。目前尚不清楚您还期待什么。 php.net/manual/en/function.implode.php 。附言您的硬编码//$holidayDays = ["2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"]是一个包含四个 单独 字符串的数组,因此它的计数在逻辑上是 4。Dovar_dump($holidayDays);你可以看到变量的结构。