我需要添加天数(输入类型编号+输入类型日期),但结果必须是数组,因此我可以一个接一个地插入数据库。
这是代码(提交HTML表格后):
<?php $start_date = '2017-12-22'; $duration = '3'; $d = new DateTime($start_date); $t = $d->getTimestamp(); // loop for X days for($i=0; $i <= $duration; $i++){ // add 1 day to timestamp- $addDay = 86400; // get what day it is next day $nextDay = date('w', ($t + $addDay)); // if it's Saturday or Sunday get $i-1 if($nextDay === 6 || $nextDay === 7) { $i --; } // modify timestamp, add 1 day $t = $t + $addDay; $d->setTimestamp($t); $day_off = $d->format( 'Y-m-d' ). "<br />"; echo $day_off; $query = "INSERT SQL"; } ?>
从 echo $ day_off 结果我得到:
2017-12-23 2017-12-24 2017-12-25 2017-12-26
而不是23,24,25,26。我需要得到以下结果:
2017年12月22日 2017年12月25日 2017年12月26日 2017年12月27日
22是输入日期,从25开始,因为23和24是周六和周日,需要排除周末。
我怎样才能达到这个效果?我一直在网上搜索,但不幸的是,我找不到我需要的东西。
@C。 Geek 回答是有效的,但我在这里有一个更复杂的问题,因为我的帐户没有资格提出更多问题所以我会在这里问。
所以这就是我到目前为止所尝试过的( @C.Geek 回答):
<?php
// loop for X days
for($i=0; $i < $duration; $i++){
$d = strtotime("$start_date +$i weekdays");
$t = strftime("%Y-%m-%d",$d);
$day_off[] = $t;
foreach($day_off as $dayoff) {
$data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT * FROM `holiday_master_data` WHERE `date` = '$dayoff' "));
}
$holiday[] = $data_holiday['date'];
$date = array_diff($day_off, $holiday);
$dayoff_ = $holiday;
?>
开始日期:2017-12-29 持续时间:5天
来自 print_r($ day_off); 我收到了这样的结果:
数组([0] =&gt; 2017-12-29)数组([0] =&gt; 2017-12-29 [1] =&gt; 2018-01-01)数组([0] =&gt; 2017-12-29 [1] =&gt; 2018-01-01 [2] =&gt; 2018-01-02)
从 print_r($ holiday); 我得到了这个结果:
数组([0] =&gt;)数组([0] =&gt; [1] =&gt; 2018-01-01)数组([0] =&gt; [1] =&gt; 2018-01- 01 [2] =&gt;)数组([0] =&gt; [1] =&gt; 2018-01-01 [2] =&gt; [3] =&gt;)数组([0] =&gt; [1 ] =&gt; 2018-01-01 [2] =&gt; [3] =&gt; [4] =&gt;)
从数据库获取的国家日期是2018-01-01,有5个循环结果,我需要做的最终日期结果是1月29日,1月3日和1月5日,1月5日。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:0)
https://stackoverflow.com/a/4261223/6288442
如果你限制工作日使用字符串工作日。
echo date ( 'Y-m-j' , strtotime ( '3 weekdays' ) );
这应该会让你突然提前3个工作日,所以如果它是星期四,它会 添加额外的周末时间。
来源:http://www.php.net/manual/en/datetime.formats.relative.php
至于格式: http://php.net/manual/en/function.strftime.php
string strftime ( string $format [, int $timestamp = time() ] )
如果您在编写代码时需要更多帮助,请在评论中说明
以下是我的完整答案:
$start_date = '2017-12-22';
$duration = 3;
$arr=null;
for($i=0; $i <= $duration; $i++){
$d = strtotime("$start_date +$i weekdays");
$t = strftime("%Y-%m-%d",$d);
$arr[]=$t;
}
在循环之前获取假期,然后在循环中,在将其添加到$ arr之前检查日期是否为in_array。 e.g。
$start_date = '2017-12-22';
$data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT * FROM `holiday_master_data` WHERE YEAR(`date`) BETWEEN YEAR('$start_date') AND YEAR('$start_date')+1 "));
$holidays =
$duration = 3;
$arr=null;
for($i=0; $i <= $duration; $i++){
$d = strtotime("$start_date +$i weekdays");
$t = strftime("%Y-%m-%d",$d);
if(!in_array($t,$data_holiday))
$arr[]=$t;
}
答案 1 :(得分:0)
最后!!几个小时后我修好了一切。以下是我设法跳过的代码(太阳和星期一)以及从数据库中取出的Skip the Holiday(基于 @ C.Geek 答案+几个调整):
<?php
include 'conn.php';
$start_date = mysqli_real_escape_string($con, $_POST['start_date']);
$duration = mysqli_real_escape_string($con, $_POST['duration']);
// loop for X days
for($i=0; $i <= $duration; $i++){
$d = strtotime("$start_date +$i weekdays");
$t = explode(", ", strftime("%Y-%m-%d", $d));
foreach ($t as $date) {
$to_encode = array("date" => $date);
$date_where = $to_encode['date'];
$data_holiday = mysqli_fetch_array(mysqli_query($con, "SELECT `date` AS '0' FROM `holiday_master_data` WHERE DATE(`date`) BETWEEN DATE('$date_where') AND DATE('$date_where') + 1 GROUP BY `id` "));
$encode_holiday = array("date" => $data_holiday[0]);
break;
}
$holiday = array_unique($encode_holiday);
$dayoff = array_diff($t, $holiday);
foreach($dayoff as $date) {
$query = mysqli_query($con, "INSERT INTO ");
if ($query) {
echo "<script>alert('Absence Saved'); window.location ='document.php' </script>";
} else {
echo "<script>alert('Gagal'); window.location ='document.php' </script>";
}
}
}
?>
&#13;
希望这可以帮助任何寻求同样问题的人。
干杯。