Php 如何在日期范围之间动态添加天数间隔
我想打印间隔内给定日期范围内的所有日期。但如果有周六,我会增加2天,如果有周日,我会增加1天 对于ex- 1) 2018年7月30日是我的开始日期。再加上5天 2) 2018年8月6日是第二个日期,比2018年8月6日增加5天,因此可能是2018年8月11日,但2018年8月11日和2008年12月12日是周六和周日,因此增加两天,下一个日期将是 3) 2018年8月13日是我的第三次约会。。。2018年8月13日+5天=2018年8月18日,但2018年8月18日和2018年8月19日是周六和周日,因此再增加2天 4) 2018年8月20日是我的第四次约会……就像怀斯一样 5) 2018年8月27日是我的最后一天,因为这是我的结束日期 6) 完成 Plz帮助我实现我的预期产出Php 如何在日期范围之间动态添加天数间隔,php,datetime,Php,Datetime,我想打印间隔内给定日期范围内的所有日期。但如果有周六,我会增加2天,如果有周日,我会增加1天 对于ex- 1) 2018年7月30日是我的开始日期。再加上5天 2) 2018年8月6日是第二个日期,比2018年8月6日增加5天,因此可能是2018年8月11日,但2018年8月11日和2008年12月12日是周六和周日,因此增加两天,下一个日期将是 3) 2018年8月13日是我的第三次约会。。。2018年8月13日+5天=2018年8月18日,但2018年8月18日和2018年8月19日是周六和
Array
(
[0] => Array
(
[month_year] => 30/07/2018
)
[1] => Array
(
[month_year] => 06/08/2018
)
[2] => Array
(
[month_year] => 13/08/2018
)
[3] => Array
(
[month_year] => 20/08/2018
)
[4] => Array
(
[month_year] => 27/08/2018
)
)
预期产出
Array
(
[0] => Array
(
[month_year] => 30/07/2018
)
[1] => Array
(
[month_year] => 06/08/2018
)
[2] => Array
(
[month_year] => 13/08/2018
)
[3] => Array
(
[month_year] => 20/08/2018
)
[4] => Array
(
[month_year] => 27/08/2018
)
)
下面是我的代码
public function testdate(){
$date_from = new \DateTime("7/30/2018");
$date_to = new \DateTime("8/27/2018");
$interval = new \DateInterval("P5D");
$dates = new \DatePeriod($date_from, $interval, $date_to);
$out = array();
if (!empty($dates)) {
foreach($dates as $dt) {
$curre = $dt->format('D');
if($curre == 'Sat'){
$dt->add(new \DateInterval('P2D'));
}
if($curre == 'Sun'){
$dt->add(new \DateInterval('P1D'));
}
$out[] = array(
'month_year' => $dt->format('d/m/Y')
);
//print_r($out);exit;
}
}
'<pre>';
//$out = array_reverse($out);
print_r($out);
'</pre>';
exit;
}
公共函数testdate(){
$date_from=new\DateTime(“2018年7月30日”);
$date_to=新\日期时间(“2018年8月27日”);
$interval=new\DateInterval(“P5D”);
$dates=new\DatePeriod($date\u from,$interval,$date\u to);
$out=array();
如果(!空($dates)){
foreach(日期为$dt){
$curre=$dt->format('D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
如果($curre=='Sat'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
$dt->add(new\DateInterval('P2D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
}
如果($curre=='Sun'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
$dt->add(new\DateInterval('P1D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
}
$out[]=数组(
'month\u year'=>$dt->格式('d/m/Y')
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
);
//打印($out);退出;
}
}
'';
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
//$out=阵列_反向($out);
打印(输出);
'';
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
出口
}
如果有一些非标准的要求,我宁愿放弃使用\DatePeriod
,而使用do…while
循环。大概是这样的:
函数日期之间(\DateTime$date\u from、\DateTime$date\u to){
//仅处理日期时始终重置时间
$date\u from->setTime(0,0);
$date\u to->setTime(0,0);
$dates_between=[];
$current\u dt=$date\u from;
做{
$dates_介于[]之间=[
“月\年”=>$current\u dt->格式('d/m/Y'),
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
];
$current_dt->add(new\DateInterval('P5D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
如果($current_dt->format('D')='Sat'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
$current_dt->add(new\DateInterval('P2D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
}
elseif($current_dt->format('D')='Sun')){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
$current_dt->add(new\DateInterval('P1D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
// always reset the time when working only with dates
$date_from->setTime(0, 0);
$date_to->setTime(0, 0);
$dates_between = [];
$current_dt = $date_from;
do {
$dates_between[] = [
'month_year' => $current_dt->format('d/m/Y'),
];
$current_dt->add(new \DateInterval('P5D'));
if ($current_dt->format('D') === 'Sat') {
$current_dt->add(new \DateInterval('P2D'));
}
elseif ($current_dt->format('D') === 'Sun') {
$current_dt->add(new \DateInterval('P1D'));
}
} while ($current_dt <= $date_to);
return $dates_between;
}
print_r(
dates_between(
new \DateTime('7/30/2018'),
new \DateTime('8/27/2018')
)
);
}
}而($当前