[英]I am trying to get weekend dates from Months in php
我正在尝试从我选择的月份中获取所有周末日期,但不幸的是没有得到周末日期,请帮助我如何获得感谢。
$request->flexibles_months
[ "Dec", "Jan", "Feb"]
Controller
public function listing(Request $request)
{
return $months = explode(',', $request->flexibles_months);
// return $months = [ "Dec", "Jan", "Feb"]
foreach ($months as $i =>$monthValue) {
$weekend = new DatePeriod(
new DateTime($monthValue),
DateInterval::createFromDateString('+1 hour'),
new DateTime('next Friday +2 days')
);
}
foreach ($weekend as $hours) {
$a = $hours->format("Y-M-d");
}
return $a;
// $a = 2021-Dec-18
这可能会对您有所帮助,您可以将所有周末日期作为 UNIX 时间戳返回和数组。
使用简单的 HTML 表单
<form>
<input name="start" type="date" />
<input name="stop" type="date" />
<input type="submit" value="Get Weekend" />
</form>
和我的 PHP 代码
<?php
if(empty($_GET['start']) || empty($_GET['stop']))
die('no data');
$list = Weekendlisting(strtotime($_GET['start']), strtotime($_GET['stop']));
if($list === false)
die('No weekend!');
foreach ($list as $day) {
print(date('c = (l)', $day) . "<br />\n");
}
function Weekendlisting(int $start, int $stop) {
$day_add = 86400;
$return = [];
if($start >= $stop)
return false;
do {
$test = date('N', $start); //ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
if($test >= 6)
$return[] = $start;
$start = $start + $day_add;
} while ( $stop > $start - $day_add);
return $return;
}
?>
我得到了结果:
2021-12-04T00:00:00+00:00 = (Saturday)
2021-12-05T00:00:00+00:00 = (Sunday)
2021-12-11T00:00:00+00:00 = (Saturday)
2021-12-12T00:00:00+00:00 = (Sunday)
2021-12-18T00:00:00+00:00 = (Saturday)
2021-12-19T00:00:00+00:00 = (Sunday)
2021-12-25T00:00:00+00:00 = (Saturday)
2021-12-26T00:00:00+00:00 = (Sunday)
首先你的 function 的第一行是一个返回语句,所以此时 function 返回到它被调用的地方。 无论如何都不会调用此行之后的代码中的任何内容。
接下来的事情是,我真的不明白你想要实现什么。 我会描述我猜你想要做什么。
您将输入几个月(这里是 12 月、1 月、2 月),结果应该是这几个月的所有周末日期,对吗? (每周六和周日)
以下代码可以稍微清理一下,但它可以工作。
// Apr and May included for the edge cases.
$months = array('Dec','Jan','Feb','Apr','May');
function weekends($mths){
// so we only have future weekends need to know 'now'.
$now = array('y'=>date('Y'),'m'=>date('m'));
$wkends;
$d;
$m;
$y;
$maxDays;
$saturday;
$sunday;
foreach($mths as $k => $v){
// is the requested month in the past for this year?
$m = date('m',strtotime($now['y'].'-'.$v.'-01'));
// if so, request next year
$y = ($m < $now['m']) ? ($now['y'] + 1) : $now['y'];
// What day is the first of the month, 1 for Monday, 7 for Sunday
$d = date('N',strtotime($y.'-'.$m.'-1'));
$saturday = (7 - $d);
$sunday = ($saturday + 1);
// And just how many days in the month
$maxDays = date('t',strtotime($y.'-'.$m.'-1'));
do {
// edge case when Sunday is 1st of month
if ($saturday == 0){
$wkends[$v][] = $y.'-'.$m.'-1 (Sun)';
} else {
$wkends[$v][] = $y.'-'.$m.'-'.$saturday.' (Sat)';
if ($sunday <= $maxDays){
$wkends[$v][] = $y.'-'.$m.'-'.$sunday.' (Sun)';
}
}
$saturday = ($saturday + 7);
$sunday = ($sunday + 7);
} while ($saturday <= $maxDays);
}
}
$result = weekends($months);
var_dump($results);
结果:
array(5) {
["Dec"]=> array(8) {
[0]=> string(15) "2021-12-4 (Sat)"
[1]=> string(15) "2021-12-5 (Sun)"
[2]=> string(16) "2021-12-11 (Sat)"
[3]=> string(16) "2021-12-12 (Sun)"
[4]=> string(16) "2021-12-18 (Sat)"
[5]=> string(16) "2021-12-19 (Sun)"
[6]=> string(16) "2021-12-25 (Sat)"
[7]=> string(16) "2021-12-26 (Sun)"
}
["Jan"]=> array(10) {
[0]=> string(15) "2022-01-1 (Sat)"
[1]=> string(15) "2022-01-2 (Sun)"
[2]=> string(15) "2022-01-8 (Sat)"
[3]=> string(15) "2022-01-9 (Sun)"
[4]=> string(16) "2022-01-15 (Sat)"
[5]=> string(16) "2022-01-16 (Sun)"
[6]=> string(16) "2022-01-22 (Sat)"
[7]=> string(16) "2022-01-23 (Sun)"
[8]=> string(16) "2022-01-29 (Sat)"
[9]=> string(16) "2022-01-30 (Sun)"
}
["Feb"]=> array(8) {
[0]=> string(15) "2022-02-5 (Sat)"
[1]=> string(15) "2022-02-6 (Sun)"
[2]=> string(16) "2022-02-12 (Sat)"
[3]=> string(16) "2022-02-13 (Sun)"
[4]=> string(16) "2022-02-19 (Sat)"
[5]=> string(16) "2022-02-20 (Sun)"
[6]=> string(16) "2022-02-26 (Sat)"
[7]=> string(16) "2022-02-27 (Sun)"
}
["Apr"]=> array(9) {
[0]=> string(15) "2022-04-2 (Sat)"
[1]=> string(15) "2022-04-3 (Sun)"
[2]=> string(15) "2022-04-9 (Sat)"
[3]=> string(16) "2022-04-10 (Sun)"
[4]=> string(16) "2022-04-16 (Sat)"
[5]=> string(16) "2022-04-17 (Sun)"
[6]=> string(16) "2022-04-23 (Sat)"
[7]=> string(16) "2022-04-24 (Sun)"
[8]=> string(16) "2022-04-30 (Sat)"
}
["May"]=> array(9) {
[0]=> string(15) "2022-05-1 (Sun)"
[1]=> string(15) "2022-05-7 (Sat)"
[2]=> string(15) "2022-05-8 (Sun)"
[3]=> string(16) "2022-05-14 (Sat)"
[4]=> string(16) "2022-05-15 (Sun)"
[5]=> string(16) "2022-05-21 (Sat)"
[6]=> string(16) "2022-05-22 (Sun)"
[7]=> string(16) "2022-05-28 (Sat)"
[8]=> string(16) "2022-05-29 (Sun)"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.