获取开始日期和结束日期介于 php 中的两个日期之间的周数
Get week numbers with start and end dates between two dates in php
我想获得开始日期和结束日期介于 php 中的两个日期之间的周数。工作日是从星期一到星期六。
例如:
$date1='2018-03-21';
$date2='2018-05-14';
我希望输出类似于
Week no Start Date End Date
Week1 2018-03-21 2018-03-24
Week2 2018-03-26 2018-03-31
以此类推
我应该如何管理才能得到这个?
我正在尝试使用 strtotime() 函数,但不知道如何获得所需的输出。
将 date() 函数与 "W" 结合使用。它将 return 从星期一开始的周数。
$array = array(
'2018-03-21',
'2018-05-14',
'2018-01-20',
'2018-06-05',
'2017-11-15'
);
echo
'<table>
<tr>
<td>Week #</td>
<td>Start Date</td>
<td>End Date</td>
</tr>';
foreach($array as $date){
echo
'<tr>' .
'<td>' . date('W', strtotime($date)) . '</td>' .
'<td>' . '' . '</td>' .
'<td>' . '' . '</td>' .
'</tr>';
}
echo
'</table>';
另一种选择是将 DateTime
class 与 ->modify
方法一起使用。它可以帮助您通过相对日期调整日期。
想法如下:(标记由您决定,或者将其放入数组中,以您喜欢的为准)
$i = 1; // week number starts at 1
$date1 = new DateTime('2018-03-21');
$date2 = new DateTime('2018-05-14');
while (true) {
echo "Week {$i}\n";
echo $date1->format('Y-m-d'), ' - ';
$date1->modify('next saturday');
if ($date1 >= $date2) {
echo $date2->format('Y-m-d');
break; // stop the loop, reached the end date, echo the last date, or whatever you want
}
echo $date1->format('Y-m-d') , "\n";
$date1->modify('next monday'); // start again on monday
$i++; // increment for next week
}
旁注:如果您想了解更多信息或深入了解您可以在相对日期使用什么,请查看文档条目:
这是一个循环Unix时间的方法。
$date=strtotime('2018-03-21');
$date2=strtotime('2018-05-14' . '23:39');
While($date <= $date2){
$new[date("W", $date)]['start'] = date("Y-m-d", $date);
$new[date("W", $date)]['end'] = date("Y-m-d", $date + (6-date("N", $date))*86400); // next saturday
$date = $date + (8-date("N", $date))*86400; // set date to next Monday.
}
$w =array_keys($new);
$new[end($w)]["end"] = date("Y-m-d", $date2); // edit last item to end date
Var_dump($new);
我想获得开始日期和结束日期介于 php 中的两个日期之间的周数。工作日是从星期一到星期六。
例如:
$date1='2018-03-21';
$date2='2018-05-14';
我希望输出类似于
Week no Start Date End Date
Week1 2018-03-21 2018-03-24
Week2 2018-03-26 2018-03-31
以此类推
我应该如何管理才能得到这个?
我正在尝试使用 strtotime() 函数,但不知道如何获得所需的输出。
将 date() 函数与 "W" 结合使用。它将 return 从星期一开始的周数。
$array = array(
'2018-03-21',
'2018-05-14',
'2018-01-20',
'2018-06-05',
'2017-11-15'
);
echo
'<table>
<tr>
<td>Week #</td>
<td>Start Date</td>
<td>End Date</td>
</tr>';
foreach($array as $date){
echo
'<tr>' .
'<td>' . date('W', strtotime($date)) . '</td>' .
'<td>' . '' . '</td>' .
'<td>' . '' . '</td>' .
'</tr>';
}
echo
'</table>';
另一种选择是将 DateTime
class 与 ->modify
方法一起使用。它可以帮助您通过相对日期调整日期。
想法如下:(标记由您决定,或者将其放入数组中,以您喜欢的为准)
$i = 1; // week number starts at 1
$date1 = new DateTime('2018-03-21');
$date2 = new DateTime('2018-05-14');
while (true) {
echo "Week {$i}\n";
echo $date1->format('Y-m-d'), ' - ';
$date1->modify('next saturday');
if ($date1 >= $date2) {
echo $date2->format('Y-m-d');
break; // stop the loop, reached the end date, echo the last date, or whatever you want
}
echo $date1->format('Y-m-d') , "\n";
$date1->modify('next monday'); // start again on monday
$i++; // increment for next week
}
旁注:如果您想了解更多信息或深入了解您可以在相对日期使用什么,请查看文档条目:
这是一个循环Unix时间的方法。
$date=strtotime('2018-03-21');
$date2=strtotime('2018-05-14' . '23:39');
While($date <= $date2){
$new[date("W", $date)]['start'] = date("Y-m-d", $date);
$new[date("W", $date)]['end'] = date("Y-m-d", $date + (6-date("N", $date))*86400); // next saturday
$date = $date + (8-date("N", $date))*86400; // set date to next Monday.
}
$w =array_keys($new);
$new[end($w)]["end"] = date("Y-m-d", $date2); // edit last item to end date
Var_dump($new);