找不到与今天动态相关的 return 周日期数组的函数
Cannot find function which return array of weekly date relative from today dynamically
正如标题所说,我一直在谷歌搜索但没有任何线索。
事情是这样的,假设我有一个采用整数参数的函数。当我调用它时,即 scoutWeekly(1)
,它会列出本月的第一周(1 月 28 日至 2 月 3 日)。如果我给函数的参数 2
,它会列出本月的第二周(2 月 4 日至 2 月 10 日)。等等...这一切都应该与这一天有关,例如,如果它被调用scoutWeekly(1)
,它会跳转到 (28 Jan-03 Feb)
你们有什么线索或片段吗?
function weeks($month, $year)
{
$num_of_days = date("t", mktime(0, 0, 0, $month, 1, $year));
$lastday = date("t", mktime(0, 0, 0, $month, 1, $year));
$no_of_weeks = 0;
$count_weeks = 0;
while ($no_of_weeks < $lastday)
{
$no_of_weeks += 7;
$count_weeks++;
}
return $count_weeks;
}
function getRangeByWeek($weekNo)
{
$firstDayOfCurrentMonth = date('Y-m-01');
$globalWeek = intval(date('W', strtotime($firstDayOfCurrentMonth)));
$globalYear = intval(date('Y', strtotime($firstDayOfCurrentMonth)));
$globalMonth = intval(date('m', strtotime($firstDayOfCurrentMonth)));
$totalNumberOfWeeks = weeks($globalMonth, $globalYear);
$date = new DateTime();
$result = [];
for ($i = 1; $i <= $totalNumberOfWeeks; $i++)
{
$startDate = $date->setISODate($globalYear, $globalWeek)->format("d M");
$endDate = $date->setISODate($globalYear, $globalWeek, 7)->format("d M");
$result[$i] = $startDate . '-' . $endDate;
$globalWeek++;
}
return $result[$weekNo];
}
echo getRangeByWeek(1);
- 从当月的第一天和所需的年份和月份提取全球周
- 当月总周数
- 创建了空的 DateTime 实例以执行简单计算并获取全局周的第一个日期
- 将全局周数增加到当月的总周数
- 无论生成什么结果,我都将索引保留为当月的周数
- 返回当月当前周数的日期范围
输出
28 Jan-03 Feb
有一个更简单的方法...
function scoutWeekly($n) {
// today's date
$today = new DateTime();
// set to first day of the month
$today->setDate($today->format('Y'), $today->format('m'), 1);
// get the Monday earlier
$today->sub(new DateInterval('P' . ($today->format('N') - 1) . 'D'));
// add the required number of weeks
if ($n > 1) {
$today->add(new DateInterval('P' . ($n - 1) . 'W'));
}
// and format the result
return $today->format('d M') . '-' . $today->add(new DateInterval('P6D'))->format('d M');
}
echo scoutWeekly(1)
输出:
28 Jan-03 Feb
我是主播
这是已解决的答案:
private static function addScoutWeek(int $addNumb = null) : array
{
$addStart = Carbon::now()->startOfMonth()->addWeek($addNumb)->startOfWeek();
$interval = new \DateInterval('P1D');
$addEnd = Carbon::now()->startOfMonth()->addWeek($addNumb)->endOfWeek();
$dateRange = new \DatePeriod($addStart, $interval, $addEnd);
foreach ($dateRange as $date) {
$arrOfDate[] = $date;
}
return $arrOfDate;
}
结案
正如标题所说,我一直在谷歌搜索但没有任何线索。
事情是这样的,假设我有一个采用整数参数的函数。当我调用它时,即 scoutWeekly(1)
,它会列出本月的第一周(1 月 28 日至 2 月 3 日)。如果我给函数的参数 2
,它会列出本月的第二周(2 月 4 日至 2 月 10 日)。等等...这一切都应该与这一天有关,例如,如果它被调用scoutWeekly(1)
,它会跳转到 (28 Jan-03 Feb)
你们有什么线索或片段吗?
function weeks($month, $year)
{
$num_of_days = date("t", mktime(0, 0, 0, $month, 1, $year));
$lastday = date("t", mktime(0, 0, 0, $month, 1, $year));
$no_of_weeks = 0;
$count_weeks = 0;
while ($no_of_weeks < $lastday)
{
$no_of_weeks += 7;
$count_weeks++;
}
return $count_weeks;
}
function getRangeByWeek($weekNo)
{
$firstDayOfCurrentMonth = date('Y-m-01');
$globalWeek = intval(date('W', strtotime($firstDayOfCurrentMonth)));
$globalYear = intval(date('Y', strtotime($firstDayOfCurrentMonth)));
$globalMonth = intval(date('m', strtotime($firstDayOfCurrentMonth)));
$totalNumberOfWeeks = weeks($globalMonth, $globalYear);
$date = new DateTime();
$result = [];
for ($i = 1; $i <= $totalNumberOfWeeks; $i++)
{
$startDate = $date->setISODate($globalYear, $globalWeek)->format("d M");
$endDate = $date->setISODate($globalYear, $globalWeek, 7)->format("d M");
$result[$i] = $startDate . '-' . $endDate;
$globalWeek++;
}
return $result[$weekNo];
}
echo getRangeByWeek(1);
- 从当月的第一天和所需的年份和月份提取全球周
- 当月总周数
- 创建了空的 DateTime 实例以执行简单计算并获取全局周的第一个日期
- 将全局周数增加到当月的总周数
- 无论生成什么结果,我都将索引保留为当月的周数
- 返回当月当前周数的日期范围
输出
28 Jan-03 Feb
有一个更简单的方法...
function scoutWeekly($n) {
// today's date
$today = new DateTime();
// set to first day of the month
$today->setDate($today->format('Y'), $today->format('m'), 1);
// get the Monday earlier
$today->sub(new DateInterval('P' . ($today->format('N') - 1) . 'D'));
// add the required number of weeks
if ($n > 1) {
$today->add(new DateInterval('P' . ($n - 1) . 'W'));
}
// and format the result
return $today->format('d M') . '-' . $today->add(new DateInterval('P6D'))->format('d M');
}
echo scoutWeekly(1)
输出:
28 Jan-03 Feb
我是主播
这是已解决的答案:
private static function addScoutWeek(int $addNumb = null) : array
{
$addStart = Carbon::now()->startOfMonth()->addWeek($addNumb)->startOfWeek();
$interval = new \DateInterval('P1D');
$addEnd = Carbon::now()->startOfMonth()->addWeek($addNumb)->endOfWeek();
$dateRange = new \DatePeriod($addStart, $interval, $addEnd);
foreach ($dateRange as $date) {
$arrOfDate[] = $date;
}
return $arrOfDate;
}
结案