例如: $startDate
是星期一2007-02-05和$endDate
星期二2007-02-20。然後我希望它列出:php函數獲取日期範圍內的所有星期一
Monday 2007-02-05
Monday 2007-02-12
Monday 2007-02-19
我看了一下PHP手冊,發現這樣可以獲得兩個日期之間的所有日子。但如何以我想要的方式做到這一點? PHP代碼:
例如: $startDate
是星期一2007-02-05和$endDate
星期二2007-02-20。然後我希望它列出:php函數獲取日期範圍內的所有星期一
Monday 2007-02-05
Monday 2007-02-12
Monday 2007-02-19
我看了一下PHP手冊,發現這樣可以獲得兩個日期之間的所有日子。但如何以我想要的方式做到這一點? PHP代碼:
for ($i = strtotime($startDate); $i <= strtotime($endDate); $i = strtotime('+1 day', $i)) {
if (date('N', $i) == 1) //Monday == 1
echo date('l Y-m-d', $i); //prints the date only if it's a Monday
}
轉換$的startDate和$結束日期之前到時間戳:
foreach ($date = $start; $date <= $end; $date += 60 * 60 * 24)
{
if (strftime('%w', $date) == 1)
{
$mondays[] = strftime('%A %Y-%m-%d', $date);
}
}
而不是讓所有的日子,並通過他們的所有循環,開始日期後獲得的第一個星期一,然後遍歷每次7天:
$endDate = strtotime($endDate);
for($i = strtotime('Monday', strtotime($startDate)); $i <= $endDate; $i = strtotime('+1 week', $i))
echo date('l Y-m-d', $i);
這是獲取「$ startdate」的工作日並計算兩個日期之間的工作日數的代碼。
`$startdate` = '2015-03-01'; `$endate` = '2015-03-31'; `$recurringDay` = date('N', strtotime($startdate)); // recurring Day from date i.e monday = 1, Tuesday = 2 ...etc $begin = new DateTime(`$startdate`); $end = new DateTime(date('Y-m-d',strtotime('+1 day', strtotime($endate)))); while($begin format('Y-m-d'); $day[] = $begin->format('N'); $begin->modify('+1 day'); } $c=0; // counter starts foreach($day as $key=>$dt) { if ($dt==`$recurringDay`) // compare it { $k[] = $key; $c++; } } `$nofDays` = $c; // number of mondays , tuesday foreach($k as $pp) { //adding session code `$recurringDatetime[]` = $period[$pp]; // recurring dates } print_r(`$recurringDatetime`); // array of dates of monday, tuesday ..etc
這是獲取「$ startdate」平日的代碼,兩個日期之間存在週日數。 – user3513751
您可以使用下面的函數來獲取特定日期的日期範圍之間的日期數組。
您必須輸入開始日期,結束日期和日期編號。日期編號如下。 1 =週一,2 =週二,3 =週三,4 =週四。 5 =週五,6 =週六,7 =週日。
function getDateForSpecificDayBetweenDates($startDate,$endDate,$day_number){
$endDate = strtotime($endDate);
$days=array('1'=>'Monday','2' => 'Tuesday','3' => 'Wednesday','4'=>'Thursday','5' =>'Friday','6' => 'Saturday','7'=>'Sunday');
for($i = strtotime($days[$day_number], strtotime($startDate)); $i <= $endDate; $i = strtotime('+1 week', $i))
$date_array[]=date('Y-m-d',$i);
return $date_array;
}
就像一個魅力 – Robouste
我需要相同的,並創建了一個簡單的方法。
public function getMondaysInRange($dateFromString, $dateToString)
{
$dateFrom = new \DateTime($dateFromString);
$dateTo = new \DateTime($dateToString);
$dates = [];
if ($dateFrom > $dateTo) {
return $dates;
}
if (1 != $dateFrom->format('N')) {
$dateFrom->modify('next monday');
}
while ($dateFrom <= $dateTo) {
$dates[] = $dateFrom->format('Y-m-d');
$dateFrom->modify('+1 week');
}
return $dates;
}
然後使用它。
$dateFromString = '2007-02-05';
$dateToString = '2007-02-20';
var_dump($this->getMondaysInRange($dateFromString, $dateToString));
結果:
array (size=3)
0 => string '2007-02-05' (length=10)
1 => string '2007-02-12' (length=10)
2 => string '2007-02-19' (length=10)
也許這將是對某人有幫助。
我創建了一個類,你得到所有天在範圍日期按天分組的名稱:
class DayHelper{
const MONDAY = 'Mon';
const TUESDAY = 'Tue';
const WEDENSDAY = 'Wed';
const THURSDAY = 'Thu';
const FRIDAY = 'Fri';
const SATURDAY = 'Sat';
const SUNDAY = 'Sun';
public function GetYeardays($dateStart, $dateend){
$period = new \DatePeriod(
new \DateTime($dateStart), new \DateInterval('P1D'), (new \DateTime($dateend))
);
$dates = iterator_to_array($period);
$arrayreturn = array();
foreach ($dates as $val) {
$date = $val->format('Y-m-d'); //format date
$get_name = date('l', strtotime($date)); //get week day
$day_name = substr($get_name, 0, 3); // Trim day name to 3 chars
switch ($day_name) {
case self::MONDAY:
$MONDAY[] = $date;
$arrayreturn[self::MONDAY] = $MONDAY;
break;
case self::TUESDAY:
$TUESDAY[] = $date;
$arrayreturn[self::TUESDAY] = $TUESDAY;
break;
case self::WEDENSDAY:
$WEDENSDAY[] = $date;
$arrayreturn[self::WEDENSDAY] = $WEDENSDAY;
break;
case self::THURSDAY:
$THURSDAY[] = $date;
$arrayreturn[self::THURSDAY] = $THURSDAY;
break;
case self::FRIDAY:
$FRIDAY[] = $date;
$arrayreturn[self::FRIDAY] = $FRIDAY;
break;
case self::SATURDAY:
$SATURDAY[] = $date;
$arrayreturn[self::SATURDAY] = $SATURDAY;
break;
case self::SUNDAY:
$SUNDAY[] = $date;
$arrayreturn[self::SUNDAY] = $SUNDAY;
break;
}
}
return $arrayreturn;
}
}
輸出會是這樣
array (size=7)
'Fri' =>
array (size=5)
0 => string '2016/01/01' (length=10)
1 => string '2016/01/08' (length=10)
2 => string '2016/01/15' (length=10)
3 => string '2016/01/22' (length=10)
4 => string '2016/01/29' (length=10)
'Sat' =>
array (size=5)
0 => string '2016/01/02' (length=10)
1 => string '2016/01/09' (length=10)
2 => string '2016/01/16' (length=10)
3 => string '2016/01/23' (length=10)
4 => string '2016/01/30' (length=10)
'Sun' =>
array (size=4)
0 => string '2016/01/03' (length=10)
1 => string '2016/01/10' (length=10)
2 => string '2016/01/17' (length=10)
3 => string '2016/01/24' (length=10)
'Mon' =>
array (size=4)
0 => string '2016/01/04' (length=10)
1 => string '2016/01/11' (length=10)
2 => string '2016/01/18' (length=10)
3 => string '2016/01/25' (length=10)
'Tue' =>
array (size=4)
0 => string '2016/01/05' (length=10)
1 => string '2016/01/12' (length=10)
2 => string '2016/01/19' (length=10)
3 => string '2016/01/26' (length=10)
'Wed' =>
array (size=4)
0 => string '2016/01/06' (length=10)
1 => string '2016/01/13' (length=10)
2 => string '2016/01/20' (length=10)
3 => string '2016/01/27' (length=10)
'Thu' =>
array (size=4)
0 => string '2016/01/07' (length=10)
1 => string '2016/01/14' (length=10)
2 => string '2016/01/21' (length=10)
3 => string '2016/01/28' (length=10)
$dates = array();
$dates[] = strtotime($start);
for($i = 0; $i <= 12; $i++){
$dates[] = strtotime('+1 week', $dates[$i]);
}
foreach($dates as $date){ echo date("d.m.Y", $date); }
我有類似的問題,課程可以在任何一天開始。該腳本選擇開始日期並每週收集下一天,直到需要的金額(本例中爲12)。
「PHP代碼:」之後的代碼在哪裏? –