Php 获取两个日期范围内的所有日期,并基于选定的周
我需要输入两个日期,例如从2016-10-01到2016-11-01的日期范围,并生成该范围内的所有周六和周日日期 例如,本申报表:Php 获取两个日期范围内的所有日期,并基于选定的周,php,date,Php,Date,我需要输入两个日期,例如从2016-10-01到2016-11-01的日期范围,并生成该范围内的所有周六和周日日期 例如,本申报表: 2016-10-1 2016-10-2 2016-10-8 2016-10-9 2016-10-15 2016-10-16 2016-10-22 2016-10-23 2016-10-29 2016-10-30 注意:不仅仅是周末。例如,我有一个和数组,如下所示: array('monday','saturday','sunday') 我正在
2016-10-1
2016-10-2
2016-10-8
2016-10-9
2016-10-15
2016-10-16
2016-10-22
2016-10-23
2016-10-29
2016-10-30
注意:不仅仅是周末。例如,我有一个和数组,如下所示:
array('monday','saturday','sunday')
我正在尝试此代码,但无法正常工作:
$event_da = '2016-10-01';
$event_a = '2016-11-01';
$weekdays = array('saturday','sunday');
for ( $i = $event_da; $i <= $event_a; $i = $i + 86400 ) {
$thisDate = date( 'Y-m-d', $i );
$getDate = date('l', strtotime($thisDate));
if ( in_array( $getDate, $weekdays) ) {
echo $thisDate;
}
}
$event_da='2016-10-01';
$event_a='2016-11-01';
$weekdays=数组(“星期六”、“星期日”);
对于($i=$event_da;$i函数createDateRangeArray($strDateFrom,$strDateTo)
{
//获取格式为YYYY-MM-DD的两个日期并创建
//起始日期和结束日期之间的包含日期数组。
//可以在这里测试日期的有效性,但我已经在做了
//在主剧本里
$aryRange=array();
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));
如果($iDateTo>=$iDateFrom)
{
数组推送($aryRange,date($Y-m-d',$iDateFrom));//第一个条目
而($iDateFrom$start=strottime('2016-05-01 00:00');
$end=strottime('2016-07-10 00:00');
//在时间戳之间循环,一次24小时
对于($i=$start;$i,如果您的PHP>=5.1:
while (strtotime($date) <= strtotime($end_date))
{
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
$date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
}
}
?>
while(strotime($date)=6);
$date=日期(“Y-m-d”,标准时间(+1天),标准时间($date));
}
}
?>
否则:
while (strtotime($date) <= strtotime($end_date))
{
function isWeekend($date) {
$weekDay = date('w', strtotime($date));
$date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
return ($weekDay == 0 || $weekDay == 6);
}
}
while(strotime($date)这是一个非常灵活的代码,您可以输入任意两个日期和另一个数组来指定要筛选的日期
function isWeekend($start_date, $end_date, $expected_days) {
$start_timestamp = strtotime($start_date);
$end_timestamp = strtotime($end_date);
$dates = array();
while ($start_timestamp <= $end_timestamp) {
if (in_array(date('l', $start_timestamp), $expected_days)) {
$dates[] = date('Y-m-d', $start_timestamp);
}
$start_timestamp = strtotime('+1 day', $start_timestamp);
}
return $dates;
}
$start_date = '2016-10-01';
$end_date = '2016-11-01';
$expected_days = array('Monday','Saturday','Sunday');
$weekend_dates = isWeekend($start_date, $end_date, $expected_days);
试试这个:
$days = array('Monday', 'Saturday', 'Sunday');
for($i = strtotime('2016-10-01'); $i <= strtotime('2016-11-01'); $i = strtotime('+1 day', $i)) {
if (in_array(date('l', $i), $days)) {
echo date('l Y-m-d', $i);
}
}
$days=array('星期一'、'星期六'、'星期日');
对于($i=strotime('2016-10-01');$i以下代码只是Jan Walczak的编辑版本
$start = strtotime( '2016-05-01 00:00' );
$end = strtotime( '2016-07-10 00:00' );
for ( $i = $start; $i <= $end; $i = $i + 86400 ) {
$thisDate = date( 'Y-m-d', $i );
$getDate = date('l', strtotime($thisDate));
//echo $getDate . "<br>";
if ($getDate == 'Saturday' || $getDate == 'Sunday')
{
echo $thisDate . "<br>";
}
}
$start=strottime('2016-05-01 00:00');
$end=strottime('2016-07-10 00:00');
对于($i=$start;$i您到目前为止有没有尝试过任何东西?此答案将帮助您->您好,StackOverflow不是一项“我的工作”服务。请尝试一些东西,然后在遇到问题时问一个问题。@Blackus查看我的更新答案,在《现在符合您的标准》中?当然,它会更好。我邀请您查看和,以了解主题是什么,以及如何进行提问。不要从另一个SO答案复制整个答案。如果您认为这是一个重复的标志/vtc作为重复。该答案是从另一个答案复制的。因此循环继续。但我了解了关于重复的内容,以后将继续。感谢@Object Manipulator您的函数工作,最后代码是:function rangeDate($start_date,$end_date,$expected_days){$start_timestamp=strottime($start_date);$end_timestamp=strottime($end_date);$dates=array();while($start_timestamp)
Array
(
[0] => 2016-10-01
[1] => 2016-10-02
[2] => 2016-10-03
[3] => 2016-10-08
[4] => 2016-10-09
[5] => 2016-10-10
[6] => 2016-10-15
[7] => 2016-10-16
[8] => 2016-10-17
[9] => 2016-10-22
[10] => 2016-10-23
[11] => 2016-10-24
[12] => 2016-10-29
[13] => 2016-10-30
[14] => 2016-10-31
)
$days = array('Monday', 'Saturday', 'Sunday');
for($i = strtotime('2016-10-01'); $i <= strtotime('2016-11-01'); $i = strtotime('+1 day', $i)) {
if (in_array(date('l', $i), $days)) {
echo date('l Y-m-d', $i);
}
}
$start = strtotime( '2016-05-01 00:00' );
$end = strtotime( '2016-07-10 00:00' );
for ( $i = $start; $i <= $end; $i = $i + 86400 ) {
$thisDate = date( 'Y-m-d', $i );
$getDate = date('l', strtotime($thisDate));
//echo $getDate . "<br>";
if ($getDate == 'Saturday' || $getDate == 'Sunday')
{
echo $thisDate . "<br>";
}
}