用PHP计算两周之间的中间周天数
有两个工作日:星期一、星期三 如何获得该阵列中的中间天数? 回答:星期一、星期二、星期三 案例2:从周一到周一 答:周一、周二、周三、周四、周五、周六、周日、周一用PHP计算两周之间的中间周天数,php,weekday,Php,Weekday,有两个工作日:星期一、星期三 如何获得该阵列中的中间天数? 回答:星期一、星期二、星期三 案例2:从周一到周一 答:周一、周二、周三、周四、周五、周六、周日、周一 谢谢 我创建了这个函数,它可以实现这一点,注释将引导您了解它是如何实现的 function list_days($start, $end) { //convert day "word" to it's given number //Monday = 1, Tuesday = 2 ... Sunday = 7
谢谢 我创建了这个函数,它可以实现这一点,注释将引导您了解它是如何实现的
function list_days($start, $end) {
//convert day "word" to it's given number
//Monday = 1, Tuesday = 2 ... Sunday = 7
$start_n = date('N', strtotime($start));
$end_n = $end_range = date('N', strtotime($end));
//we also set $end_range above, by default it's set to the $end day number,
//but if $start and $end are the same it will be changed later.
//create an empty output array
$output = [];
//determine end_range for the for loop
//if $start and $end are not the same, the $end_range is simply the number of $end (set earlier)
if($start_n == $end_n) {
//if $start and $end ARE the same, we know there is always 7 days between the days
//So we just add 7 to the start day number.
$end_range = $start_n + 7;
}
//loop through, generate a list of days
for ($x = $start_n; $x <= $end_range; $x++) {
//convert day number back to the readable text, and put it in the output array
$output[] = date('l', strtotime("Sunday +{$x} days"));
}
//return a string with commas separating the words.
return implode(', ', $output);
}
例2:
echo list_days('Monday', 'Monday');
//output: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, Monday
我已经创建了这个函数,它可以实现这一点,并且注释会引导您了解它是如何完成的
function list_days($start, $end) {
//convert day "word" to it's given number
//Monday = 1, Tuesday = 2 ... Sunday = 7
$start_n = date('N', strtotime($start));
$end_n = $end_range = date('N', strtotime($end));
//we also set $end_range above, by default it's set to the $end day number,
//but if $start and $end are the same it will be changed later.
//create an empty output array
$output = [];
//determine end_range for the for loop
//if $start and $end are not the same, the $end_range is simply the number of $end (set earlier)
if($start_n == $end_n) {
//if $start and $end ARE the same, we know there is always 7 days between the days
//So we just add 7 to the start day number.
$end_range = $start_n + 7;
}
//loop through, generate a list of days
for ($x = $start_n; $x <= $end_range; $x++) {
//convert day number back to the readable text, and put it in the output array
$output[] = date('l', strtotime("Sunday +{$x} days"));
}
//return a string with commas separating the words.
return implode(', ', $output);
}
例2:
echo list_days('Monday', 'Monday');
//output: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, Monday
我的解决方案更多的是移动数组的内部指针,直到找到边距,并将边距之间的元素推入另一个结果数组。无论初始数组中的数据是什么,都可以使用
function getDaysInBetween($start, $end)
{
$weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
$start_found = false;
$days = [];
while(true) {
$next = next($weekdays);
$day = (empty($day) || !$next)?reset($weekdays):$next;
if($day === $start) $start_found = true;
if($start_found) {
$days[] = $day;
if($day===$end && count($days)>1) return implode(", ",$days);
}
}
}
这里的实时演示:我的解决方案更多的是移动数组的内部指针,直到找到边距,并将边距之间的元素推送到另一个结果数组中。无论初始数组中的数据是什么,都可以使用
function getDaysInBetween($start, $end)
{
$weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
$start_found = false;
$days = [];
while(true) {
$next = next($weekdays);
$day = (empty($day) || !$next)?reset($weekdays):$next;
if($day === $start) $start_found = true;
if($start_found) {
$days[] = $day;
if($day===$end && count($days)>1) return implode(", ",$days);
}
}
}
此处的实时演示:到目前为止您尝试过什么吗?您可以创建一个数组,列出星期一到星期天两次,循环它,如果天等于开始日,则开始输出,停止检查开始日,如果天等于结束日,则停止循环。星期六和星期日不被视为“星期天”,它们是“周末”。那么,在星期一到星期一的示例中,是否应该从输出中省略这些内容呢?在这种情况下,星期六和星期天也应该被考虑。如果遇到问题,请尝试我的建议,然后带着尝试过的代码返回。到目前为止,您是否尝试过任何操作?您可以创建一个数组,其中列出星期一到星期天两次,循环它,如果日等于开始日,则开始输出,停止检查开始日,如果日等于结束日,则停止循环。周六和周日不被视为“周日”,它们是“周终”。那么,在星期一到星期一的示例中,是否应该从输出中省略这些内容呢?在这种情况下,星期六和星期天也应该考虑在内。请尝试我的建议,如果遇到问题,请返回您尝试的代码。@lolo我实际上似乎犯了一个错误,请检查答案中的当前代码以修复它。基本上是错误造成的,所以如果你做了星期二->星期二,星期三->星期三等(基本上不是星期一->星期一),它将返回错误。@lolo我实际上似乎犯了错误,请检查答案中的当前代码以修复它。基本上是错误造成的,所以如果你做了星期二->星期二,星期三->星期三等(基本上不是星期一->星期一),它会返回错误。我最初打算这样做,但我被卡住了。我看到您使用了
count($days)>1
,如果我想到这一点,我会有一个类似的解决方案:DI最初打算做类似的事情,但我被卡住了。我看到您使用了count($days)>1
,如果我想到这一点,我会有一个类似的解决方案:D